code: private void encodeIntern(final LNGVector<Literal> vars) {
      if (vars.size() <= this.groupSize)
        for (int i = 0; i + 1 < vars.size(); i++)
          for (int j = i + 1; j < vars.size(); j++)
            this.result.addClause(vars.get(i).negate(), vars.get(j).negate());
      else {
        final LNGVector<Literal> l1 = new LNGVector<>(vars.size() / 2);
        final LNGVector<Literal> l2 = new LNGVector<>(vars.size() / 2);
        int i = 0;
        for (; i < vars.size() / 2; i++)
          l1.push(vars.get(i));
        for (; i < vars.size(); i++)
          l2.push(vars.get(i));
        final Variable newVariable = this.result.newVariable();
        l1.push(newVariable);
        l2.push(newVariable.negate());
        this.encodeIntern(l1);
        this.encodeIntern(l2);
      }
    }
docs: Internal recursive encoding.
  @param vars the variables of the constraint