Text this: Principles of constraint programming