@Override public void propagate(int evtmask) throws ContradictionException { ISet nei; IntVar v; for (int i = 0; i < n; i++) { nei = g.getEnvelopGraph().getSuccessorsOf(i); for (int j = nei.getFirstElement(); j >= 0; j = nei.getNextElement()) { if (!intVars[i].contains(j)) { g.removeArc(i, j, aCause); } } v = intVars[i]; int ub = v.getUB(); for (int j = v.getLB(); j <= ub; j = v.nextValue(j)) { if (j < n && !g.getEnvelopGraph().arcExists(i, j)) { v.removeValue(j, aCause); } } if (!v.hasEnumeratedDomain()) { ub = v.getUB(); while (ub >= 0 && ub < n && !g.getEnvelopGraph().arcExists(i, ub)) { v.removeValue(ub, aCause); ub--; } } } gdm.unfreeze(); for (int i = 0; i < idms.length; i++) { idms[i].unfreeze(); } }