:- lib(ic). minl([Only], Only). minl([Head|Tail], Minimum) :- minl(Tail, TailMin), Minimum #= min(Head, TailMin). maxl([Only], Only). maxl([Head|Tail], Max) :- maxl(Tail, TailMax), Max #= max(Head, TailMax). noholes(L) :- length(L,Length), maxl(L,Max),minl(L,Min),Length #= Max-Min+1. grille(L) :- L = [ X12,X13, X22,X23,X24,X25,X26, X32,X33,X34,X35,X36, X41,X42,X43,X44,X45, X51,X52,X53,X54,X55, X64,X65], L::[1..6], X25#=5,X33#=1,X41#=4,X52#=6,X53#=5,X65#=1, alldifferent([X12,X13,1]), alldifferent([X22,X23,X24,X25,X26]), alldifferent([X32,X33,X34,X35,X36]), alldifferent([X41,X42,X43,X44,X45]), alldifferent([X51,X52,X53,X54,X55]), alldifferent([X64,X65,4]), alldifferent([X41,X51]), alldifferent([X12,X22,X32,X42,X52]), alldifferent([X13,X23,X33,X43,X53]), alldifferent([1,X24,X34,X44,X54,X64]), alldifferent([X25,X35,X45,X55,X65]), alldifferent([X26,X36,4]), noholes([X12,X13]), noholes([X22,X23,X24,X25,X26]), noholes([X32,X33,X34,X35,X36]), noholes([X41,X42,X43,X44,X45]), noholes([X51,X52,X53,X54,X55]), noholes([X64,X65]), noholes([X41,X51]), noholes([X12,X22,X32,X42,X52]), noholes([X13,X23,X33,X43,X53]), noholes([X24,X34,X44,X54,X64]), noholes([X25,X35,X45,X55,X65]), noholes([X26,X36]).