code: @Override
  	public void propagate(int evtmask) throws ContradictionException {
  		if (g[0].getNbMaxNodes() != g[1].getNbMaxNodes()) {
  			for (int i = g[1].getNbMaxNodes(); i < g[0].getNbMaxNodes(); i++) {
  				g[0].removeNode(i, this);
  			}
  		}
  		ISet set = g[0].getMandatoryNodes();
  		for (int i : set) {
  			g[1].enforceNode(i, this);
  			ISet suc = g[0].getMandSuccOrNeighOf(i);
  			for (int j : suc) {
  				g[1].enforceArc(i, j, this);
  			}
  		}
  		set = g[0].getPotentialNodes();
  		for (int i : set) {
  			if (!g[1].getPotentialNodes().contains(i)) {
  				g[0].removeNode(i, this);
  			} else {
  				ISet suc = g[0].getPotSuccOrNeighOf(i);
  				for (int j : suc) {
  					if (!g[1].getPotSuccOrNeighOf(i).contains(j)) {
  						g[1].removeArc(i, j, this);
  					}
  				}
  			}
  		}
  		gdm[0].unfreeze();
  		gdm[1].unfreeze();
  	}
docs: ***********************************************************************************