code: private CCAtMostOne bestAMO(int n) {
      if (n <= 10) {
        if (this.amoPure == null)
          this.amoPure = new CCAMOPure();
        return this.amoPure;
      } else {
        if (this.amoProduct == null)
          this.amoProduct = new CCAMOProduct(this.config().productRecursiveBound);
        return this.amoProduct;
      }
    }
docs: Returns the best at-most-one encoder for a given number of variables.  The valuation is based on theoretical and
  practical observations.  For <= 10 the pure encoding without introduction of new variables is used, otherwise
  the product encoding is chosen.
  @param n the number of variables
  @return the best at-most-one encoder