$ pl Welcome to SWI-Prolog (Multi-threaded, Version 5.6.24) Copyright (c) 1990-2006 University of Amsterdam. SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. Please visit http://www.swi-prolog.org for details. For help, use ?- help(Topic). or ?- apropos(Word). ?- ['crypto.pro']. % combosets.pro compiled 0.00 sec, 7,448 bytes % crypto.pro compiled 0.00 sec, 10,912 bytes Yes ?- crypto(1,2,3,4,5,15,Solution). Solution = ex(ex(ex(1, +, 2), +, 4), +, ex(5, +, 3)) ; Solution = ex(ex(3, +, 4), +, ex(5, +, ex(1, +, 2))) ; Solution = ex(5, +, ex(ex(1, +, 2), +, ex(3, +, 4))) ; Solution = ex(5, +, ex(3, +, ex(ex(1, +, 2), +, 4))) ; Solution = ex(ex(1, +, 2), +, ex(5, +, ex(3, +, 4))) ; Solution = ex(3, +, ex(5, +, ex(ex(1, +, 2), +, 4))) ; Solution = ex(ex(ex(1, +, 2), -, 4), *, ex(5, *, 3)) ; Solution = ex(ex(3, -, 4), *, ex(5, *, ex(1, +, 2))) ; Solution = ex(ex(ex(1, +, 2), -, 4), /, ex(5, *, 3)) ; Solution = ex(ex(3, -, 4), /, ex(5, *, ex(1, +, 2))) ; Solution = ex(5, *, ex(ex(1, +, 2), *, ex(3, -, 4))) Yes ?- crypto(1,1,1,1,1,5,Solution). Solution = ex(ex(1, +, 1), +, ex(1, +, ex(1, +, 1))) ; Solution = ex(ex(1, +, 1), +, ex(1, +, ex(1, +, 1))) ; Solution = ex(1, +, ex(ex(1, +, 1), +, ex(1, +, 1))) ; Solution = ex(1, +, ex(ex(1, +, 1), +, ex(1, +, 1))) ; Solution = ex(1, +, ex(ex(1, +, 1), *, ex(1, +, 1))) ; Solution = ex(1, +, ex(ex(1, +, 1), *, ex(1, +, 1))) ; Solution = ex(ex(1, +, 1), +, ex(1, +, ex(1, +, 1))) ; Solution = ex(ex(1, +, 1), +, ex(1, +, ex(1, +, 1))) ; Solution = ex(ex(1, +, 1), +, ex(1, +, ex(1, +, 1))) ; Solution = ex(ex(1, +, 1), +, ex(1, +, ex(1, +, 1))) ; Solution = ex(1, +, ex(ex(1, +, 1), +, ex(1, +, 1))) ; Solution = ex(1, +, ex(ex(1, +, 1), +, ex(1, +, 1))) ; Solution = ex(1, +, ex(ex(1, +, 1), *, ex(1, +, 1))) ; Solution = ex(1, +, ex(ex(1, +, 1), *, ex(1, +, 1))) ; Solution = ex(ex(1, +, 1), +, ex(1, +, ex(1, +, 1))) ; Solution = ex(ex(1, +, 1), +, ex(1, +, ex(1, +, 1))) ; Solution = ex(ex(1, +, ex(1, +, 1)), +, ex(1, +, 1)) ; Solution = ex(1, +, ex(1, +, ex(1, +, ex(1, +, 1)))) ; Solution = ex(1, +, ex(1, +, ex(1, +, ex(1, +, 1)))) Yes ?- crypto(3,7,8,5,8,2,Solution). Solution = ex(ex(3, +, 7), /, ex(8, -, ex(8, +, 5))) ; Solution = ex(ex(8, *, 5), /, ex(8, *, ex(3, +, 7))) ; Solution = ex(8, /, ex(ex(3, +, 7), /, ex(8, *, 5))) ; Solution = ex(ex(3, +, 7), /, ex(8, /, ex(8, *, 5))) ; Solution = ex(ex(3, +, 7), /, ex(8, -, ex(8, -, 5))) ; Solution = ex(ex(3, +, 7), /, ex(8, +, ex(8, -, 5))) ; Solution = ex(ex(8, -, 8), +, ex(5, /, ex(3, +, 7))) ; Solution = ex(ex(8, -, 8), -, ex(5, /, ex(3, +, 7))) ; Solution = ex(5, /, ex(ex(3, +, 7), +, ex(8, -, 8))) ; Solution = ex(5, /, ex(ex(3, +, 7), -, ex(8, -, 8))) Yes ?-