general purpose problem solver