start:-solution(X,Y,Z). solution([S,E,N,D],[M,O,R,E],[M,O,N,E,Y]):- digitsum(R4,0,0,M,0), digitsum(R3,S,M,O,R4), digitsum(R2,E,O,N,R3), digitsum(R1,N,R,E,R2), digitsum(0,D,E,Y,R1), not(eq(S,0)), not(eq(M,0)), different([S,E,N,D,M,O,R,Y]). digitsum(0,X,Y,Z,R):-plus([0,X],[0,Y],[R,Z]). digitsum(1,X,Y,Z,R):-plus([0,X],[0,Y],Z1),plusone(Z1,[R,Z]). different([]). different([X|Y]):-notinlist(X,Y),different(Y). notinlist(_,[]). notinlist(X,[Y|Z]):-not(eq(X,Y)),notinlist(X,Z). plus([0,0],X,X). plus(X,Y,Z):-plusone(X1,X),plus(X1,Y,Z1),plusone(Z1,Z). plusone([0,0],[0,1]). plusone([0,1],[0,2]). plusone([0,2],[0,3]). plusone([0,3],[0,4]). plusone([0,4],[0,5]). plusone([0,5],[0,6]). plusone([0,6],[0,7]). plusone([0,7],[0,8]). plusone([0,8],[0,9]). plusone([0,9],[1,0]). plusone([1,0],[1,1]). plusone([1,1],[1,2]). plusone([1,2],[1,3]). plusone([1,3],[1,4]). plusone([1,4],[1,5]). plusone([1,5],[1,6]). plusone([1,6],[1,7]). plusone([1,7],[1,8]). plusone([1,8],[1,9]).