Principles Of Constraint Programming