// Path: src/com/juliasoft/beedeedee/bdd/Assignment.java
// public interface Assignment {
// 
// 	/**
// 	 * Determines if the given BDD variable holds in this assignment.
// 	 *
// 	 * @param var the variable
// 	 * @return true if and only if {@code var} holds in this assignment
// 	 * @throws IndexOutOfBoundsException if the variable does not belong to this
// 	 *             assignment. This means that the variable can be assigned any
// 	 *             value
// 	 */
// 	public boolean holds(BDD var) throws IndexOutOfBoundsException;
// 
// 	/**
// 	 * Determines if the given BDD variable holds in this assignment.
// 	 *
// 	 * @param i the variable index
// 	 * @return true if and only if the variable indexed by {@code i} holds in
// 	 *         this assignment
// 	 * @throws IndexOutOfBoundsException if the variable does not belong to this
// 	 *             assignment. This means that the variable can be assigned any
// 	 *             value
// 	 */
// 	public boolean holds(int i);
// 
// 	/**
// 	 * @return a <em>minterm</em> representation of the assignment
// 	 */
// 	public BDD toBDD();
// 
// 	/**
// 	 * Adds a mapping for the given variable.
// 	 * 
// 	 * @param var the variable index
// 	 * @param value the value to assign to the variable in this assignment
// 	 */
// 	public void put(int var, boolean value);
// 
// }
// 
// Path: src/com/juliasoft/beedeedee/bdd/ReplacementWithExistingVarException.java
// @SuppressWarnings("serial")
// public class ReplacementWithExistingVarException extends RuntimeException {
// 
// 	private final int varNum;
// 
// 	public ReplacementWithExistingVarException(int varNum) {
// 		this.varNum = varNum;
// 	}
// 
// 	public int getVarNum() {
// 		return varNum;
// 	}
// 
// 	@Override
// 	public String toString() {
// 		return "trying to replace with variable " + varNum + " which is already in the BDD";
// 	}
// }
// 
// Path: src/com/juliasoft/beedeedee/factories/Factory.java
// public static interface GarbageCollectionListener {
// 
// 	/**
// 	 * Called when a garbage collection operation is about to start.
// 	 * 
// 	 * @param num the progressive number of the garbage collection operation
// 	 * @param size the number of nodes in the garbage collected table
// 	 * @param free the number of free nodes after the operation
// 	 * @param totalTime the cumulative garbage collection time up to now
// 	 */
// 
// 	public void onStart(int num, int size, int free, long totalTime);
// 
// 	/**
// 	 * Called when a garbage collection operation has been performed.
// 	 * 
// 	 * @param num the progressive number of the garbage collection operation
// 	 * @param size the number of nodes in the garbage collected table
// 	 * @param free the number of free nodes after the operation
// 	 * @param time the time required for the garbage collection
// 	 * @param totalTime the cumulative garbage collection time up to now
// 	 */
// 
// 	public void onStop(int num, int size, int free, long time, long totalTime);
// }
// 
// Path: src/com/juliasoft/beedeedee/factories/Factory.java
// public static interface ResizeListener {
// 
// 	/**
// 	 * Called when a resize operation is about to start.
// 	 * 
// 	 * @param num the progressive number of the resize operation
// 	 * @param oldSize the old size of the table
// 	 * @param newSize the new size of the table
// 	 * @param totalTime the cumulative resize time up to now
// 	 */
// 
// 	public void onStart(int num, int oldSize, int newSize, long totalTime);
// 
// 	/**
// 	 * Called when a resize operation has been performed.
// 	 * 
// 	 * @param num the progressive number of the resize operation
// 	 * @param oldSize the old size of the table
// 	 * @param newSize the new size of the table
// 	 * @param time the time required for the resize
// 	 * @param totalTime the cumulative resize time up to now
// 	 */
// 
// 	public void onStop(int num, int oldSize, int newSize, long time, long totalTime);
// }


import net.sf.javabdd.BDDException;
import net.sf.javabdd.BDDFactory;
import net.sf.javabdd.BDDPairing;
import com.juliasoft.beedeedee.bdd.Assignment;
import com.juliasoft.beedeedee.bdd.ReplacementWithExistingVarException;
import com.juliasoft.beedeedee.factories.Factory.GarbageCollectionListener;
import com.juliasoft.beedeedee.factories.Factory.ResizeListener;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.sf.javabdd.BDD;
import net.sf.javabdd.BDDBitVector;
import net.sf.javabdd.BDDDomain;
		 */
		
		@Override
		public BDD applyUni(BDD that, BDDOp opr, BDD var) {
			throw new UnsupportedOperationException();
		}

		@Override
		public BDD satOne() {
			return new JavaBDDAdapterBDD(bdd.anySat().toBDD());
		}

		/**
		 * Unsupported operation.
		 */
		
		@Override
		public BDD fullSatOne() {
			throw new UnsupportedOperationException();
		}

		/**
		 * Unsupported operation.
		 */
		
		@Override
		public BDD satOne(BDD var, boolean pol) {
			throw new UnsupportedOperationException();
		}

// Path: src/com/juliasoft/beedeedee/bdd/Assignment.java
// public interface Assignment {
// 
// 	/**
// 	 * Determines if the given BDD variable holds in this assignment.
// 	 *
// 	 * @param var the variable
// 	 * @return true if and only if {@code var} holds in this assignment
// 	 * @throws IndexOutOfBoundsException if the variable does not belong to this
// 	 *             assignment. This means that the variable can be assigned any
// 	 *             value
// 	 */
// 	public boolean holds(BDD var) throws IndexOutOfBoundsException;
// 
// 	/**
// 	 * Determines if the given BDD variable holds in this assignment.
// 	 *
// 	 * @param i the variable index
// 	 * @return true if and only if the variable indexed by {@code i} holds in
// 	 *         this assignment
// 	 * @throws IndexOutOfBoundsException if the variable does not belong to this
// 	 *             assignment. This means that the variable can be assigned any
// 	 *             value
// 	 */
// 	public boolean holds(int i);
// 
// 	/**
// 	 * @return a <em>minterm</em> representation of the assignment
// 	 */
// 	public BDD toBDD();
// 
// 	/**
// 	 * Adds a mapping for the given variable.
// 	 * 
// 	 * @param var the variable index
// 	 * @param value the value to assign to the variable in this assignment
// 	 */
// 	public void put(int var, boolean value);
// 
// }
// 
// Path: src/com/juliasoft/beedeedee/bdd/ReplacementWithExistingVarException.java
// @SuppressWarnings("serial")
// public class ReplacementWithExistingVarException extends RuntimeException {
// 
// 	private final int varNum;
// 
// 	public ReplacementWithExistingVarException(int varNum) {
// 		this.varNum = varNum;
// 	}
// 
// 	public int getVarNum() {
// 		return varNum;
// 	}
// 
// 	@Override
// 	public String toString() {
// 		return "trying to replace with variable " + varNum + " which is already in the BDD";
// 	}
// }
// 
// Path: src/com/juliasoft/beedeedee/factories/Factory.java
// public static interface GarbageCollectionListener {
// 
// 	/**
// 	 * Called when a garbage collection operation is about to start.
// 	 * 
// 	 * @param num the progressive number of the garbage collection operation
// 	 * @param size the number of nodes in the garbage collected table
// 	 * @param free the number of free nodes after the operation
// 	 * @param totalTime the cumulative garbage collection time up to now
// 	 */
// 
// 	public void onStart(int num, int size, int free, long totalTime);
// 
// 	/**
// 	 * Called when a garbage collection operation has been performed.
// 	 * 
// 	 * @param num the progressive number of the garbage collection operation
// 	 * @param size the number of nodes in the garbage collected table
// 	 * @param free the number of free nodes after the operation
// 	 * @param time the time required for the garbage collection
// 	 * @param totalTime the cumulative garbage collection time up to now
// 	 */
// 
// 	public void onStop(int num, int size, int free, long time, long totalTime);
// }
// 
// Path: src/com/juliasoft/beedeedee/factories/Factory.java
// public static interface ResizeListener {
// 
// 	/**
// 	 * Called when a resize operation is about to start.
// 	 * 
// 	 * @param num the progressive number of the resize operation
// 	 * @param oldSize the old size of the table
// 	 * @param newSize the new size of the table
// 	 * @param totalTime the cumulative resize time up to now
// 	 */
// 
// 	public void onStart(int num, int oldSize, int newSize, long totalTime);
// 
// 	/**
// 	 * Called when a resize operation has been performed.
// 	 * 
// 	 * @param num the progressive number of the resize operation
// 	 * @param oldSize the old size of the table
// 	 * @param newSize the new size of the table
// 	 * @param time the time required for the resize
// 	 * @param totalTime the cumulative resize time up to now
// 	 */
// 
// 	public void onStop(int num, int oldSize, int newSize, long time, long totalTime);
// }


// Path: src/com/juliasoft/beedeedee/factories/JavaBDDAdapterFactory.java
import net.sf.javabdd.BDDException;
import net.sf.javabdd.BDDFactory;
import net.sf.javabdd.BDDPairing;
import com.juliasoft.beedeedee.bdd.Assignment;
import com.juliasoft.beedeedee.bdd.ReplacementWithExistingVarException;
import com.juliasoft.beedeedee.factories.Factory.GarbageCollectionListener;
import com.juliasoft.beedeedee.factories.Factory.ResizeListener;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.sf.javabdd.BDD;
import net.sf.javabdd.BDDBitVector;
import net.sf.javabdd.BDDDomain;

		 */
		
		@Override
		public BDD applyUni(BDD that, BDDOp opr, BDD var) {
			throw new UnsupportedOperationException();
		}

		@Override
		public BDD satOne() {
			return new JavaBDDAdapterBDD(bdd.anySat().toBDD());
		}

		/**
		 * Unsupported operation.
		 */
		
		@Override
		public BDD fullSatOne() {
			throw new UnsupportedOperationException();
		}

		/**
		 * Unsupported operation.
		 */
		
		@Override
		public BDD satOne(BDD var, boolean pol) {
			throw new UnsupportedOperationException();
		}

		@Override