/**
* Makes a CSP consisting of binary constraints arc-consistent.
* @return An object which indicates success/failure and contains
* data to undo the operation.
*/
public DomainRestoreInfo reduceDomains(CSP csp)
{
DomainRestoreInfo result = new DomainRestoreInfo();
FIFOQueue<Variable> queue = new FIFOQueue<Variable>();
foreach (Variable var in csp.getVariables())
queue.Add(var);
reduceDomains(queue, csp, result);
return result.compactify();
}