How To Solve Constraint Satisfaction Problems