Principles and Practice Of Constraint Programming by Eugene C Freuder