Principles of Constraint Processing