Principles of Constraint Programming by