The version in tomnjerry2 also allows arbitrary rotations. Within 25 minutes we obtain all solutions: ?- tomnjerry2 --o solve (s (s (s (s (s (s (s (s (s z))))))))) Moves. Moves_1 <- next c2 (next c8 (next c9 (next c4 (next c1 (next c3 (next c7 (next c5 (next c6 done)))))))); Moves_1 <- next c2 (next c6 (next c8 (next c5 (next c7 (next c9 (next c1 (next c4 (next c3 done)))))))); Moves_1 <- next c2 (next c1 (next c6 (next c3 (next c7 (next c5 (next c4 (next c8 (next c9 done)))))))); Moves_1 <- next c3 (next c4 (next c1 (next c9 (next c7 (next c2 (next c8 (next c6 (next c5 done)))))))); Moves_1 <- next c3 (next c4 (next c1 (next c9 (next c7 (next c5 (next c8 (next c6 (next c2 done)))))))); Moves_1 <- next c3 (next c9 (next c2 (next c5 (next c1 (next c6 (next c8 (next c7 (next c4 done)))))))); Moves_1 <- next c3 (next c9 (next c5 (next c2 (next c1 (next c6 (next c8 (next c7 (next c4 done)))))))); Moves_1 <- next c4 (next c7 (next c8 (next c6 (next c1 (next c2 (next c5 (next c9 (next c3 done)))))))); Moves_1 <- next c4 (next c7 (next c8 (next c6 (next c1 (next c5 (next c2 (next c9 (next c3 done)))))))); Moves_1 <- next c5 (next c8 (next c9 (next c4 (next c1 (next c3 (next c7 (next c2 (next c6 done)))))))); Moves_1 <- next c5 (next c6 (next c8 (next c2 (next c7 (next c9 (next c1 (next c4 (next c3 done)))))))); Moves_1 <- next c5 (next c1 (next c6 (next c3 (next c7 (next c2 (next c4 (next c8 (next c9 done)))))))); Moves_1 <- next c6 (next c2 (next c7 (next c3 (next c1 (next c4 (next c9 (next c8 (next c5 done)))))))); Moves_1 <- next c6 (next c5 (next c7 (next c3 (next c1 (next c4 (next c9 (next c8 (next c2 done)))))))); Moves_1 <- next c9 (next c8 (next c4 (next c2 (next c7 (next c3 (next c6 (next c1 (next c5 done)))))))); Moves_1 <- next c9 (next c8 (next c4 (next c5 (next c7 (next c3 (next c6 (next c1 (next c2 done)))))))); no The 16 answers means there are 8 solutions (since two cards are the same) of which all but 2 are essentially symmetric (each solution can be rotated).