constraint satisfaction problem