class BDDInteger {

  public List<Long> getValuesSatisfying(BDD bdd, int max) {
    ImmutableList.Builder<Long> values = new ImmutableList.Builder<>();

    checkArgument(max > 0, "max must be > 0");

    int num = 0;
    BDD pred = bdd;
    while (num < max) {
      if (pred.isZero()) {
        break;
      }
      long val = satAssignmentToLong(pred.satOne());
      values.add(val);
      pred = pred.diff(value(val));
      num++;
    }
    return values.build();
  }

  private  BDDInteger(BDDFactory factory, int length);
  public  BDDInteger(BDDInteger other);

}