code: @Override
  	public void propagate(int evtmask) throws ContradictionException {
  		// reset
  		int n = g.getNbMaxNodes();
  		support.getNodes().clear();
  		for (int i = 0; i < n; i++) {
  			support.getNeighOf(i).clear();
  		}
  		ISet nodes = g.getMandatoryNodes();
  		for (int i : nodes) {
  			support.addNode(i);
  		}
  		for (int i : nodes) {
  			ISet nei = g.getPotNeighOf(i);
  			for (int j : nei) {
  				if (i < j) {
  					support.addEdge(i, j);
  				}
  			}
  		}
  		delta = n - g.getMandatoryNodes().size();
  		// algorithm
  		heur.prepare();
  		do {
  			heur.computeMIS();
  			for (R rule : rules) {
  				rule.filter(nb, support, heur, this);
  			}
  		} while (heur.hasNextMIS());
  	}
docs: ***********************************************************************************