code: @Override
  	public void propagate(int evtmask) throws ContradictionException {
  		int min = 0;
  		int max = 0;
  		ISet nodes = g.getPotentialNodes();
  		for (int i : nodes) {
  			if (g.getMandSuccOrNeighOf(i).contains(i)) {
  				min++;
  				max++;
  			} else if (g.getPotSuccOrNeighOf(i).contains(i)) {
  				max++;
  			}
  		}
  		k.updateLowerBound(min, this);
  		k.updateUpperBound(max, this);
  		if (min == max) {
  			setPassive();
  		} else if (k.isInstantiated()) {
  			if (k.getValue() == max) {
  				for (int i : nodes) {
  					if (g.getPotSuccOrNeighOf(i).contains(i)) {
  						g.enforceArc(i, i, this);
  					}
  				}
  				setPassive();
  			} else if (k.getValue() == min) {
  				for (int i : nodes) {
  					if (!g.getMandSuccOrNeighOf(i).contains(i)) {
  						g.removeArc(i, i, this);
  					}
  				}
  				setPassive();
  			}
  		}
  	}
docs: ***********************************************************************************