A problem solver