docs: public final boolean addConstraints(Constraint... c) {
  		if (c == null || c.length == 0){ 
  			return true;
  		}
  		ArrayList<Constraint> incomp = new ArrayList<Constraint>(c.length);
  		for (Constraint con : c) {
  			if (isCompatible(con) && !con.isSkippableSolver(this)) { }
  			else 
  				incomp.add(con);
  		}
  		ArrayList<Constraint> toAdd = new ArrayList<Constraint>(c.length);
  
  		for (Constraint con : c) if (!incomp.contains(con)) toAdd.add(con);
  		
  		//if there is no constraint left to add, just return successfully
  		if (toAdd.size() == 0) return true;
  		
  		Constraint[] toAddArray = toAdd.toArray(new Constraint[toAdd.size()]);
  
  		//call solver-specific procedures for adding constraints, then propagate
  		this.maskConstraints(c);
  		if (addConstraintsSub(toAddArray)) {
  			//NOTE: must add new cons before attempting propagation, because some solvers call
  			//constraint network methods in their implementation of propagate()... 
  			for (Constraint con : toAddArray) this.theNetwork.addConstraint(con);
  			if (!skipPropagation && autoprop && checkDomainsInstantiated()) { 
  				if (this.propagate()) {
  					logger.finest("Added and propagated constraints " + Arrays.toString(toAddArray));
  					this.unmaskConstraints(c);
  					return true;
  				}
  				//... and then remove new cons if propagation not successful...
  				this.removeConstraints(toAddArray);
  //				for (Constraint con : toAddArray) {
  //					this.theNetwork.removeConstraint(con);
  //				}
  				logger.finest("Failed to add constraints " + Arrays.toString(toAddArray));
  			}
  			else {
  				logger.finest("Added constraints " + Arrays.toString(toAddArray) + " BUT DELAYED PROPAGATION (autoprop = " + autoprop + ")");
  				this.unmaskConstraints(c);
  				return true;
  			}
  		}
  		//... and finally re-propagate if not successful to put everything back the way it was
  		if (!skipPropagation && autoprop && checkDomainsInstantiated()) this.propagate();
  		this.unmaskConstraints(c);
  		return false;
  	}