:- use_package(fd). solve(X,Y) :- X = [A,B,C,D,E,F,G,H,I,J], Y = [AA,BB,DD,EE,FF,GG,HH,II,JJ,KK], X in 0 .. 9, Y in 0 .. 9, all_different(X), all_different(Y), (1000*AA+100*BB+10*FF+FF) - (1000*DD+100*EE+10*FF+AA) .=. (1000*GG+100*HH+10*II+HH), (1000*DD+100*II+10*GG+JJ) - ( 100*KK+10*JJ+JJ) .=. ( 100*HH+10*JJ+II), (1000*DD+100*EE+10*FF+AA) - ( 100*KK+10*JJ+JJ) .=. ( 100*BB+10*EE+HH), (1000*GG+100*HH+10*II+HH) - ( 100*HH+10*JJ+II) .=. (1000*HH+100*BB+10*FF+HH), ( 100*A+10*E+F) + ( 100*G+10*E+E) .=. (1000*H+100*F+10*I+E), (1000*I+100*A+10*F+A) + (1000*H+100*D+10*C+J) .=. (1000*J+100*B+10*C+C), (1000*A+100*B+10*C+A) + ( 100*A+10*E+F) .=. (1000*I+100*A+10*F+A), ( 100*B+10*D+A) + ( 100*G+10*E+E) .=. (1000*H+100*D+10*C+J), labeling(X), labeling(Y).