A constraint solver