code: @Override
  	public void propagate(int evtmask) throws ContradictionException {
  		for (int i = 0; i < n; i++) {
  			ISet tmp = g.getMandSuccOrNeighOf(i);
  			for (int j : tmp) {
  				sets[i].force(j, this);
  				if (!g.isDirected()) {
  					sets[j].force(i, this);
  				}
  			}
  			for (int j : sets[i].getUB()) {
  				if (!g.getPotSuccOrNeighOf(i).contains(j)) {
  					sets[i].remove(j, this);
  					if (!g.isDirected()) {
  						sets[j].remove(i, this);
  					}
  				}
  			}
  		}
  		gdm.unfreeze();
  	}
docs: ***********************************************************************************