:- module(tatami,[tatami/2,listup/0]). room(4,5). count(N) :- room(W,H),!,N is W*H/2. space(X,Y) :- room(W,H), W0 is W-1, H0 is H-1, between(0,W0,X), between(0,H0,Y). covered([X,Y,yoko],X1,Y) :- X1 is X+1,!. covered([X,Y,tate],X,Y1) :- Y1 is Y+1,!. tatami([],Spaces) :- setof([X,Y],space(X,Y),Spaces),!. tatami([[X,Y,D]|Rest],U) :- tatami(Rest,S), member(D,[tate,yoko]), select([X,Y],S,T), covered([X,Y,D],A,B), select([A,B],T,U). :- dynamic answers/1. listup :- count(N), length(A,N), tatami(A,[]), sort(A,B), \+ answers(B), assert(answers(B)), write(B), write('\n'), fail.