Constraint satisfaction problems