%%% A test HYPROLOG test program
%%%
%%% A planning problem formulated as abduction
%%%
%%% (c) Henning Christiansen 2008
%%%
%%% See comments below or the following reference for details about the example
%%%
%%% H. Christiansen.
%%% Executable specifications for hypothesis-based reasoning with
%%% Prolog and Constraint Handling Rules,
%%% Journal of Applied Logic, to appear 2008 or -09.
%%% Preliminary version available at
%%% http://www.ruc.dk/~henning/publications/HypoReason2008_HC.pdf



allow_duplicate_abducibles.
no_explicit_negation. 
abducibles put_in_place/2. %  put_in_place(Object,Time)

%%% An integrity constraint:
%%% - a part cannot be placed earlier that a part that supports it.

put_in_place(P0,Time0), put_in_place(P1,Time1)
==>
  supports(P0,P1), Time0 > Time1 | fail.

%%% Another integrity constraints
%%% - building houses of cards, two slanting cards touching each other in the
%%%   top must be placed at successive moments.

put_in_place(card(N,L,l),Time0), put_in_place(card(N,L,r),Time1)
==> 1 is abs(Time1-Time0).

%%% Clauses; use ?- build. as initial query
build:-
  height(H), write('Height='),write(H),nl,
  statistics(runtime,_),
  put_in_place(soil,0),
  parts(Parts),
  build(Parts,1),
  statistics(runtime,[_,T]),
  write('Used : '),write(T), write(ms), suppress_print.

    
build([],_).

build(Parts,Time):-
   takePart(P,Parts,RestParts),
   put_in_place(P,Time),
   Time1 is Time+1,
   build(RestParts,Time1).

:- chr_constraint suppress_print/0.

suppress_print \ put_in_place(_,_)#X <=> true pragma passive(X).

/******************************

We build a house of cards

      /\
     /__\
    /\  /\
   /__\/__\
   
   .......
   
  /\  /\  /\  ........
 /__\/__\/__\
=============================
   
We number each layer n: 1,2,... starting from the top, and each "triangle"
from the left m: 1,2,...  and the cards involved as left (l), right (r) and bottom (b).

For ease of programming we assume there are B cards also at the bottom layer, and
they are put on the soil.

The term card(n,m,L) is card in n'the layer, m't triable and Left 

******************************/

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% BEGIN - GENERATED BY write_house(n) defined at bottom of file

parts([card(15,15,b), card(15,15,l), card(15,15,r), card(15,14,b), card(15,14,l), card(15,14,r), card(15,13,b), card(15,13,l), card(15,13,r), card(15,12,b), card(15,12,l), card(15,12,r), card(15,11,b), card(15,11,l), card(15,11,r), card(15,10,b), card(15,10,l), card(15,10,r), card(15,9,b), card(15,9,l), card(15,9,r), card(15,8,b), card(15,8,l), card(15,8,r), card(15,7,b), card(15,7,l), card(15,7,r), card(15,6,b), card(15,6,l), card(15,6,r), card(15,5,b), card(15,5,l), card(15,5,r), card(15,4,b), card(15,4,l), card(15,4,r), card(15,3,b), card(15,3,l), card(15,3,r), card(15,2,b), card(15,2,l), card(15,2,r), card(15,1,b), card(15,1,l), card(15,1,r), card(14,14,b), card(14,14,l), card(14,14,r), card(14,13,b), card(14,13,l), card(14,13,r), card(14,12,b), card(14,12,l), card(14,12,r), card(14,11,b), card(14,11,l), card(14,11,r), card(14,10,b), card(14,10,l), card(14,10,r), card(14,9,b), card(14,9,l), card(14,9,r), card(14,8,b), card(14,8,l), card(14,8,r), card(14,7,b), card(14,7,l), card(14,7,r), card(14,6,b), card(14,6,l), card(14,6,r), card(14,5,b), card(14,5,l), card(14,5,r), card(14,4,b), card(14,4,l), card(14,4,r), card(14,3,b), card(14,3,l), card(14,3,r), card(14,2,b), card(14,2,l), card(14,2,r), card(14,1,b), card(14,1,l), card(14,1,r), card(13,13,b), card(13,13,l), card(13,13,r), card(13,12,b), card(13,12,l), card(13,12,r), card(13,11,b), card(13,11,l), card(13,11,r), card(13,10,b), card(13,10,l), card(13,10,r), card(13,9,b), card(13,9,l), card(13,9,r), card(13,8,b), card(13,8,l), card(13,8,r), card(13,7,b), card(13,7,l), card(13,7,r), card(13,6,b), card(13,6,l), card(13,6,r), card(13,5,b), card(13,5,l), card(13,5,r), card(13,4,b), card(13,4,l), card(13,4,r), card(13,3,b), card(13,3,l), card(13,3,r), card(13,2,b), card(13,2,l), card(13,2,r), card(13,1,b), card(13,1,l), card(13,1,r), card(12,12,b), card(12,12,l), card(12,12,r), card(12,11,b), card(12,11,l), card(12,11,r), card(12,10,b), card(12,10,l), card(12,10,r), card(12,9,b), card(12,9,l), card(12,9,r), card(12,8,b), card(12,8,l), card(12,8,r), card(12,7,b), card(12,7,l), card(12,7,r), card(12,6,b), card(12,6,l), card(12,6,r), card(12,5,b), card(12,5,l), card(12,5,r), card(12,4,b), card(12,4,l), card(12,4,r), card(12,3,b), card(12,3,l), card(12,3,r), card(12,2,b), card(12,2,l), card(12,2,r), card(12,1,b), card(12,1,l), card(12,1,r), card(11,11,b), card(11,11,l), card(11,11,r), card(11,10,b), card(11,10,l), card(11,10,r), card(11,9,b), card(11,9,l), card(11,9,r), card(11,8,b), card(11,8,l), card(11,8,r), card(11,7,b), card(11,7,l), card(11,7,r), card(11,6,b), card(11,6,l), card(11,6,r), card(11,5,b), card(11,5,l), card(11,5,r), card(11,4,b), card(11,4,l), card(11,4,r), card(11,3,b), card(11,3,l), card(11,3,r), card(11,2,b), card(11,2,l), card(11,2,r), card(11,1,b), card(11,1,l), card(11,1,r), card(10,10,b), card(10,10,l), card(10,10,r), card(10,9,b), card(10,9,l), card(10,9,r), card(10,8,b), card(10,8,l), card(10,8,r), card(10,7,b), card(10,7,l), card(10,7,r), card(10,6,b), card(10,6,l), card(10,6,r), card(10,5,b), card(10,5,l), card(10,5,r), card(10,4,b), card(10,4,l), card(10,4,r), card(10,3,b), card(10,3,l), card(10,3,r), card(10,2,b), card(10,2,l), card(10,2,r), card(10,1,b), card(10,1,l), card(10,1,r), card(9,9,b), card(9,9,l), card(9,9,r), card(9,8,b), card(9,8,l), card(9,8,r), card(9,7,b), card(9,7,l), card(9,7,r), card(9,6,b), card(9,6,l), card(9,6,r), card(9,5,b), card(9,5,l), card(9,5,r), card(9,4,b), card(9,4,l), card(9,4,r), card(9,3,b), card(9,3,l), card(9,3,r), card(9,2,b), card(9,2,l), card(9,2,r), card(9,1,b), card(9,1,l), card(9,1,r), card(8,8,b), card(8,8,l), card(8,8,r), card(8,7,b), card(8,7,l), card(8,7,r), card(8,6,b), card(8,6,l), card(8,6,r), card(8,5,b), card(8,5,l), card(8,5,r), card(8,4,b), card(8,4,l), card(8,4,r), card(8,3,b), card(8,3,l), card(8,3,r), card(8,2,b), card(8,2,l), card(8,2,r), card(8,1,b), card(8,1,l), card(8,1,r), card(7,7,b), card(7,7,l), card(7,7,r), card(7,6,b), card(7,6,l), card(7,6,r), card(7,5,b), card(7,5,l), card(7,5,r), card(7,4,b), card(7,4,l), card(7,4,r), card(7,3,b), card(7,3,l), card(7,3,r), card(7,2,b), card(7,2,l), card(7,2,r), card(7,1,b), card(7,1,l), card(7,1,r), card(6,6,b), card(6,6,l), card(6,6,r), card(6,5,b), card(6,5,l), card(6,5,r), card(6,4,b), card(6,4,l), card(6,4,r), card(6,3,b), card(6,3,l), card(6,3,r), card(6,2,b), card(6,2,l), card(6,2,r), card(6,1,b), card(6,1,l), card(6,1,r), card(5,5,b), card(5,5,l), card(5,5,r), card(5,4,b), card(5,4,l), card(5,4,r), card(5,3,b), card(5,3,l), card(5,3,r), card(5,2,b), card(5,2,l), card(5,2,r), card(5,1,b), card(5,1,l), card(5,1,r), card(4,4,b), card(4,4,l), card(4,4,r), card(4,3,b), card(4,3,l), card(4,3,r), card(4,2,b), card(4,2,l), card(4,2,r), card(4,1,b), card(4,1,l), card(4,1,r), card(3,3,b), card(3,3,l), card(3,3,r), card(3,2,b), card(3,2,l), card(3,2,r), card(3,1,b), card(3,1,l), card(3,1,r), card(2,2,b), card(2,2,l), card(2,2,r), card(2,1,b), card(2,1,l), card(2,1,r), card(1,1,b), card(1,1,l), card(1,1,r)]).

supports(card(15,15,b),card(15,15,l)).
supports(card(15,15,b),card(15,15,r)).
supports(card(15,15,l),card(14,14,b)).
supports(card(15,15,r),card(14,14,b)).
supports(card(15,14,b),card(15,14,l)).
supports(card(15,14,b),card(15,14,r)).
supports(card(15,14,l),card(14,13,b)).
supports(card(15,14,r),card(14,13,b)).
supports(card(15,14,l),card(14,14,b)).
supports(card(15,14,r),card(14,14,b)).
supports(card(15,13,b),card(15,13,l)).
supports(card(15,13,b),card(15,13,r)).
supports(card(15,13,l),card(14,12,b)).
supports(card(15,13,r),card(14,12,b)).
supports(card(15,13,l),card(14,13,b)).
supports(card(15,13,r),card(14,13,b)).
supports(card(15,12,b),card(15,12,l)).
supports(card(15,12,b),card(15,12,r)).
supports(card(15,12,l),card(14,11,b)).
supports(card(15,12,r),card(14,11,b)).
supports(card(15,12,l),card(14,12,b)).
supports(card(15,12,r),card(14,12,b)).
supports(card(15,11,b),card(15,11,l)).
supports(card(15,11,b),card(15,11,r)).
supports(card(15,11,l),card(14,10,b)).
supports(card(15,11,r),card(14,10,b)).
supports(card(15,11,l),card(14,11,b)).
supports(card(15,11,r),card(14,11,b)).
supports(card(15,10,b),card(15,10,l)).
supports(card(15,10,b),card(15,10,r)).
supports(card(15,10,l),card(14,9,b)).
supports(card(15,10,r),card(14,9,b)).
supports(card(15,10,l),card(14,10,b)).
supports(card(15,10,r),card(14,10,b)).
supports(card(15,9,b),card(15,9,l)).
supports(card(15,9,b),card(15,9,r)).
supports(card(15,9,l),card(14,8,b)).
supports(card(15,9,r),card(14,8,b)).
supports(card(15,9,l),card(14,9,b)).
supports(card(15,9,r),card(14,9,b)).
supports(card(15,8,b),card(15,8,l)).
supports(card(15,8,b),card(15,8,r)).
supports(card(15,8,l),card(14,7,b)).
supports(card(15,8,r),card(14,7,b)).
supports(card(15,8,l),card(14,8,b)).
supports(card(15,8,r),card(14,8,b)).
supports(card(15,7,b),card(15,7,l)).
supports(card(15,7,b),card(15,7,r)).
supports(card(15,7,l),card(14,6,b)).
supports(card(15,7,r),card(14,6,b)).
supports(card(15,7,l),card(14,7,b)).
supports(card(15,7,r),card(14,7,b)).
supports(card(15,6,b),card(15,6,l)).
supports(card(15,6,b),card(15,6,r)).
supports(card(15,6,l),card(14,5,b)).
supports(card(15,6,r),card(14,5,b)).
supports(card(15,6,l),card(14,6,b)).
supports(card(15,6,r),card(14,6,b)).
supports(card(15,5,b),card(15,5,l)).
supports(card(15,5,b),card(15,5,r)).
supports(card(15,5,l),card(14,4,b)).
supports(card(15,5,r),card(14,4,b)).
supports(card(15,5,l),card(14,5,b)).
supports(card(15,5,r),card(14,5,b)).
supports(card(15,4,b),card(15,4,l)).
supports(card(15,4,b),card(15,4,r)).
supports(card(15,4,l),card(14,3,b)).
supports(card(15,4,r),card(14,3,b)).
supports(card(15,4,l),card(14,4,b)).
supports(card(15,4,r),card(14,4,b)).
supports(card(15,3,b),card(15,3,l)).
supports(card(15,3,b),card(15,3,r)).
supports(card(15,3,l),card(14,2,b)).
supports(card(15,3,r),card(14,2,b)).
supports(card(15,3,l),card(14,3,b)).
supports(card(15,3,r),card(14,3,b)).
supports(card(15,2,b),card(15,2,l)).
supports(card(15,2,b),card(15,2,r)).
supports(card(15,2,l),card(14,1,b)).
supports(card(15,2,r),card(14,1,b)).
supports(card(15,2,l),card(14,2,b)).
supports(card(15,2,r),card(14,2,b)).
supports(card(15,1,b),card(15,1,l)).
supports(card(15,1,b),card(15,1,r)).
supports(card(15,1,l),card(14,1,b)).
supports(card(15,1,r),card(14,1,b)).

supports(card(14,14,b),card(14,14,l)).
supports(card(14,14,b),card(14,14,r)).
supports(card(14,14,l),card(13,13,b)).
supports(card(14,14,r),card(13,13,b)).
supports(card(14,13,b),card(14,13,l)).
supports(card(14,13,b),card(14,13,r)).
supports(card(14,13,l),card(13,12,b)).
supports(card(14,13,r),card(13,12,b)).
supports(card(14,13,l),card(13,13,b)).
supports(card(14,13,r),card(13,13,b)).
supports(card(14,12,b),card(14,12,l)).
supports(card(14,12,b),card(14,12,r)).
supports(card(14,12,l),card(13,11,b)).
supports(card(14,12,r),card(13,11,b)).
supports(card(14,12,l),card(13,12,b)).
supports(card(14,12,r),card(13,12,b)).
supports(card(14,11,b),card(14,11,l)).
supports(card(14,11,b),card(14,11,r)).
supports(card(14,11,l),card(13,10,b)).
supports(card(14,11,r),card(13,10,b)).
supports(card(14,11,l),card(13,11,b)).
supports(card(14,11,r),card(13,11,b)).
supports(card(14,10,b),card(14,10,l)).
supports(card(14,10,b),card(14,10,r)).
supports(card(14,10,l),card(13,9,b)).
supports(card(14,10,r),card(13,9,b)).
supports(card(14,10,l),card(13,10,b)).
supports(card(14,10,r),card(13,10,b)).
supports(card(14,9,b),card(14,9,l)).
supports(card(14,9,b),card(14,9,r)).
supports(card(14,9,l),card(13,8,b)).
supports(card(14,9,r),card(13,8,b)).
supports(card(14,9,l),card(13,9,b)).
supports(card(14,9,r),card(13,9,b)).
supports(card(14,8,b),card(14,8,l)).
supports(card(14,8,b),card(14,8,r)).
supports(card(14,8,l),card(13,7,b)).
supports(card(14,8,r),card(13,7,b)).
supports(card(14,8,l),card(13,8,b)).
supports(card(14,8,r),card(13,8,b)).
supports(card(14,7,b),card(14,7,l)).
supports(card(14,7,b),card(14,7,r)).
supports(card(14,7,l),card(13,6,b)).
supports(card(14,7,r),card(13,6,b)).
supports(card(14,7,l),card(13,7,b)).
supports(card(14,7,r),card(13,7,b)).
supports(card(14,6,b),card(14,6,l)).
supports(card(14,6,b),card(14,6,r)).
supports(card(14,6,l),card(13,5,b)).
supports(card(14,6,r),card(13,5,b)).
supports(card(14,6,l),card(13,6,b)).
supports(card(14,6,r),card(13,6,b)).
supports(card(14,5,b),card(14,5,l)).
supports(card(14,5,b),card(14,5,r)).
supports(card(14,5,l),card(13,4,b)).
supports(card(14,5,r),card(13,4,b)).
supports(card(14,5,l),card(13,5,b)).
supports(card(14,5,r),card(13,5,b)).
supports(card(14,4,b),card(14,4,l)).
supports(card(14,4,b),card(14,4,r)).
supports(card(14,4,l),card(13,3,b)).
supports(card(14,4,r),card(13,3,b)).
supports(card(14,4,l),card(13,4,b)).
supports(card(14,4,r),card(13,4,b)).
supports(card(14,3,b),card(14,3,l)).
supports(card(14,3,b),card(14,3,r)).
supports(card(14,3,l),card(13,2,b)).
supports(card(14,3,r),card(13,2,b)).
supports(card(14,3,l),card(13,3,b)).
supports(card(14,3,r),card(13,3,b)).
supports(card(14,2,b),card(14,2,l)).
supports(card(14,2,b),card(14,2,r)).
supports(card(14,2,l),card(13,1,b)).
supports(card(14,2,r),card(13,1,b)).
supports(card(14,2,l),card(13,2,b)).
supports(card(14,2,r),card(13,2,b)).
supports(card(14,1,b),card(14,1,l)).
supports(card(14,1,b),card(14,1,r)).
supports(card(14,1,l),card(13,1,b)).
supports(card(14,1,r),card(13,1,b)).

supports(card(13,13,b),card(13,13,l)).
supports(card(13,13,b),card(13,13,r)).
supports(card(13,13,l),card(12,12,b)).
supports(card(13,13,r),card(12,12,b)).
supports(card(13,12,b),card(13,12,l)).
supports(card(13,12,b),card(13,12,r)).
supports(card(13,12,l),card(12,11,b)).
supports(card(13,12,r),card(12,11,b)).
supports(card(13,12,l),card(12,12,b)).
supports(card(13,12,r),card(12,12,b)).
supports(card(13,11,b),card(13,11,l)).
supports(card(13,11,b),card(13,11,r)).
supports(card(13,11,l),card(12,10,b)).
supports(card(13,11,r),card(12,10,b)).
supports(card(13,11,l),card(12,11,b)).
supports(card(13,11,r),card(12,11,b)).
supports(card(13,10,b),card(13,10,l)).
supports(card(13,10,b),card(13,10,r)).
supports(card(13,10,l),card(12,9,b)).
supports(card(13,10,r),card(12,9,b)).
supports(card(13,10,l),card(12,10,b)).
supports(card(13,10,r),card(12,10,b)).
supports(card(13,9,b),card(13,9,l)).
supports(card(13,9,b),card(13,9,r)).
supports(card(13,9,l),card(12,8,b)).
supports(card(13,9,r),card(12,8,b)).
supports(card(13,9,l),card(12,9,b)).
supports(card(13,9,r),card(12,9,b)).
supports(card(13,8,b),card(13,8,l)).
supports(card(13,8,b),card(13,8,r)).
supports(card(13,8,l),card(12,7,b)).
supports(card(13,8,r),card(12,7,b)).
supports(card(13,8,l),card(12,8,b)).
supports(card(13,8,r),card(12,8,b)).
supports(card(13,7,b),card(13,7,l)).
supports(card(13,7,b),card(13,7,r)).
supports(card(13,7,l),card(12,6,b)).
supports(card(13,7,r),card(12,6,b)).
supports(card(13,7,l),card(12,7,b)).
supports(card(13,7,r),card(12,7,b)).
supports(card(13,6,b),card(13,6,l)).
supports(card(13,6,b),card(13,6,r)).
supports(card(13,6,l),card(12,5,b)).
supports(card(13,6,r),card(12,5,b)).
supports(card(13,6,l),card(12,6,b)).
supports(card(13,6,r),card(12,6,b)).
supports(card(13,5,b),card(13,5,l)).
supports(card(13,5,b),card(13,5,r)).
supports(card(13,5,l),card(12,4,b)).
supports(card(13,5,r),card(12,4,b)).
supports(card(13,5,l),card(12,5,b)).
supports(card(13,5,r),card(12,5,b)).
supports(card(13,4,b),card(13,4,l)).
supports(card(13,4,b),card(13,4,r)).
supports(card(13,4,l),card(12,3,b)).
supports(card(13,4,r),card(12,3,b)).
supports(card(13,4,l),card(12,4,b)).
supports(card(13,4,r),card(12,4,b)).
supports(card(13,3,b),card(13,3,l)).
supports(card(13,3,b),card(13,3,r)).
supports(card(13,3,l),card(12,2,b)).
supports(card(13,3,r),card(12,2,b)).
supports(card(13,3,l),card(12,3,b)).
supports(card(13,3,r),card(12,3,b)).
supports(card(13,2,b),card(13,2,l)).
supports(card(13,2,b),card(13,2,r)).
supports(card(13,2,l),card(12,1,b)).
supports(card(13,2,r),card(12,1,b)).
supports(card(13,2,l),card(12,2,b)).
supports(card(13,2,r),card(12,2,b)).
supports(card(13,1,b),card(13,1,l)).
supports(card(13,1,b),card(13,1,r)).
supports(card(13,1,l),card(12,1,b)).
supports(card(13,1,r),card(12,1,b)).

supports(card(12,12,b),card(12,12,l)).
supports(card(12,12,b),card(12,12,r)).
supports(card(12,12,l),card(11,11,b)).
supports(card(12,12,r),card(11,11,b)).
supports(card(12,11,b),card(12,11,l)).
supports(card(12,11,b),card(12,11,r)).
supports(card(12,11,l),card(11,10,b)).
supports(card(12,11,r),card(11,10,b)).
supports(card(12,11,l),card(11,11,b)).
supports(card(12,11,r),card(11,11,b)).
supports(card(12,10,b),card(12,10,l)).
supports(card(12,10,b),card(12,10,r)).
supports(card(12,10,l),card(11,9,b)).
supports(card(12,10,r),card(11,9,b)).
supports(card(12,10,l),card(11,10,b)).
supports(card(12,10,r),card(11,10,b)).
supports(card(12,9,b),card(12,9,l)).
supports(card(12,9,b),card(12,9,r)).
supports(card(12,9,l),card(11,8,b)).
supports(card(12,9,r),card(11,8,b)).
supports(card(12,9,l),card(11,9,b)).
supports(card(12,9,r),card(11,9,b)).
supports(card(12,8,b),card(12,8,l)).
supports(card(12,8,b),card(12,8,r)).
supports(card(12,8,l),card(11,7,b)).
supports(card(12,8,r),card(11,7,b)).
supports(card(12,8,l),card(11,8,b)).
supports(card(12,8,r),card(11,8,b)).
supports(card(12,7,b),card(12,7,l)).
supports(card(12,7,b),card(12,7,r)).
supports(card(12,7,l),card(11,6,b)).
supports(card(12,7,r),card(11,6,b)).
supports(card(12,7,l),card(11,7,b)).
supports(card(12,7,r),card(11,7,b)).
supports(card(12,6,b),card(12,6,l)).
supports(card(12,6,b),card(12,6,r)).
supports(card(12,6,l),card(11,5,b)).
supports(card(12,6,r),card(11,5,b)).
supports(card(12,6,l),card(11,6,b)).
supports(card(12,6,r),card(11,6,b)).
supports(card(12,5,b),card(12,5,l)).
supports(card(12,5,b),card(12,5,r)).
supports(card(12,5,l),card(11,4,b)).
supports(card(12,5,r),card(11,4,b)).
supports(card(12,5,l),card(11,5,b)).
supports(card(12,5,r),card(11,5,b)).
supports(card(12,4,b),card(12,4,l)).
supports(card(12,4,b),card(12,4,r)).
supports(card(12,4,l),card(11,3,b)).
supports(card(12,4,r),card(11,3,b)).
supports(card(12,4,l),card(11,4,b)).
supports(card(12,4,r),card(11,4,b)).
supports(card(12,3,b),card(12,3,l)).
supports(card(12,3,b),card(12,3,r)).
supports(card(12,3,l),card(11,2,b)).
supports(card(12,3,r),card(11,2,b)).
supports(card(12,3,l),card(11,3,b)).
supports(card(12,3,r),card(11,3,b)).
supports(card(12,2,b),card(12,2,l)).
supports(card(12,2,b),card(12,2,r)).
supports(card(12,2,l),card(11,1,b)).
supports(card(12,2,r),card(11,1,b)).
supports(card(12,2,l),card(11,2,b)).
supports(card(12,2,r),card(11,2,b)).
supports(card(12,1,b),card(12,1,l)).
supports(card(12,1,b),card(12,1,r)).
supports(card(12,1,l),card(11,1,b)).
supports(card(12,1,r),card(11,1,b)).

supports(card(11,11,b),card(11,11,l)).
supports(card(11,11,b),card(11,11,r)).
supports(card(11,11,l),card(10,10,b)).
supports(card(11,11,r),card(10,10,b)).
supports(card(11,10,b),card(11,10,l)).
supports(card(11,10,b),card(11,10,r)).
supports(card(11,10,l),card(10,9,b)).
supports(card(11,10,r),card(10,9,b)).
supports(card(11,10,l),card(10,10,b)).
supports(card(11,10,r),card(10,10,b)).
supports(card(11,9,b),card(11,9,l)).
supports(card(11,9,b),card(11,9,r)).
supports(card(11,9,l),card(10,8,b)).
supports(card(11,9,r),card(10,8,b)).
supports(card(11,9,l),card(10,9,b)).
supports(card(11,9,r),card(10,9,b)).
supports(card(11,8,b),card(11,8,l)).
supports(card(11,8,b),card(11,8,r)).
supports(card(11,8,l),card(10,7,b)).
supports(card(11,8,r),card(10,7,b)).
supports(card(11,8,l),card(10,8,b)).
supports(card(11,8,r),card(10,8,b)).
supports(card(11,7,b),card(11,7,l)).
supports(card(11,7,b),card(11,7,r)).
supports(card(11,7,l),card(10,6,b)).
supports(card(11,7,r),card(10,6,b)).
supports(card(11,7,l),card(10,7,b)).
supports(card(11,7,r),card(10,7,b)).
supports(card(11,6,b),card(11,6,l)).
supports(card(11,6,b),card(11,6,r)).
supports(card(11,6,l),card(10,5,b)).
supports(card(11,6,r),card(10,5,b)).
supports(card(11,6,l),card(10,6,b)).
supports(card(11,6,r),card(10,6,b)).
supports(card(11,5,b),card(11,5,l)).
supports(card(11,5,b),card(11,5,r)).
supports(card(11,5,l),card(10,4,b)).
supports(card(11,5,r),card(10,4,b)).
supports(card(11,5,l),card(10,5,b)).
supports(card(11,5,r),card(10,5,b)).
supports(card(11,4,b),card(11,4,l)).
supports(card(11,4,b),card(11,4,r)).
supports(card(11,4,l),card(10,3,b)).
supports(card(11,4,r),card(10,3,b)).
supports(card(11,4,l),card(10,4,b)).
supports(card(11,4,r),card(10,4,b)).
supports(card(11,3,b),card(11,3,l)).
supports(card(11,3,b),card(11,3,r)).
supports(card(11,3,l),card(10,2,b)).
supports(card(11,3,r),card(10,2,b)).
supports(card(11,3,l),card(10,3,b)).
supports(card(11,3,r),card(10,3,b)).
supports(card(11,2,b),card(11,2,l)).
supports(card(11,2,b),card(11,2,r)).
supports(card(11,2,l),card(10,1,b)).
supports(card(11,2,r),card(10,1,b)).
supports(card(11,2,l),card(10,2,b)).
supports(card(11,2,r),card(10,2,b)).
supports(card(11,1,b),card(11,1,l)).
supports(card(11,1,b),card(11,1,r)).
supports(card(11,1,l),card(10,1,b)).
supports(card(11,1,r),card(10,1,b)).

supports(card(10,10,b),card(10,10,l)).
supports(card(10,10,b),card(10,10,r)).
supports(card(10,10,l),card(9,9,b)).
supports(card(10,10,r),card(9,9,b)).
supports(card(10,9,b),card(10,9,l)).
supports(card(10,9,b),card(10,9,r)).
supports(card(10,9,l),card(9,8,b)).
supports(card(10,9,r),card(9,8,b)).
supports(card(10,9,l),card(9,9,b)).
supports(card(10,9,r),card(9,9,b)).
supports(card(10,8,b),card(10,8,l)).
supports(card(10,8,b),card(10,8,r)).
supports(card(10,8,l),card(9,7,b)).
supports(card(10,8,r),card(9,7,b)).
supports(card(10,8,l),card(9,8,b)).
supports(card(10,8,r),card(9,8,b)).
supports(card(10,7,b),card(10,7,l)).
supports(card(10,7,b),card(10,7,r)).
supports(card(10,7,l),card(9,6,b)).
supports(card(10,7,r),card(9,6,b)).
supports(card(10,7,l),card(9,7,b)).
supports(card(10,7,r),card(9,7,b)).
supports(card(10,6,b),card(10,6,l)).
supports(card(10,6,b),card(10,6,r)).
supports(card(10,6,l),card(9,5,b)).
supports(card(10,6,r),card(9,5,b)).
supports(card(10,6,l),card(9,6,b)).
supports(card(10,6,r),card(9,6,b)).
supports(card(10,5,b),card(10,5,l)).
supports(card(10,5,b),card(10,5,r)).
supports(card(10,5,l),card(9,4,b)).
supports(card(10,5,r),card(9,4,b)).
supports(card(10,5,l),card(9,5,b)).
supports(card(10,5,r),card(9,5,b)).
supports(card(10,4,b),card(10,4,l)).
supports(card(10,4,b),card(10,4,r)).
supports(card(10,4,l),card(9,3,b)).
supports(card(10,4,r),card(9,3,b)).
supports(card(10,4,l),card(9,4,b)).
supports(card(10,4,r),card(9,4,b)).
supports(card(10,3,b),card(10,3,l)).
supports(card(10,3,b),card(10,3,r)).
supports(card(10,3,l),card(9,2,b)).
supports(card(10,3,r),card(9,2,b)).
supports(card(10,3,l),card(9,3,b)).
supports(card(10,3,r),card(9,3,b)).
supports(card(10,2,b),card(10,2,l)).
supports(card(10,2,b),card(10,2,r)).
supports(card(10,2,l),card(9,1,b)).
supports(card(10,2,r),card(9,1,b)).
supports(card(10,2,l),card(9,2,b)).
supports(card(10,2,r),card(9,2,b)).
supports(card(10,1,b),card(10,1,l)).
supports(card(10,1,b),card(10,1,r)).
supports(card(10,1,l),card(9,1,b)).
supports(card(10,1,r),card(9,1,b)).

supports(card(9,9,b),card(9,9,l)).
supports(card(9,9,b),card(9,9,r)).
supports(card(9,9,l),card(8,8,b)).
supports(card(9,9,r),card(8,8,b)).
supports(card(9,8,b),card(9,8,l)).
supports(card(9,8,b),card(9,8,r)).
supports(card(9,8,l),card(8,7,b)).
supports(card(9,8,r),card(8,7,b)).
supports(card(9,8,l),card(8,8,b)).
supports(card(9,8,r),card(8,8,b)).
supports(card(9,7,b),card(9,7,l)).
supports(card(9,7,b),card(9,7,r)).
supports(card(9,7,l),card(8,6,b)).
supports(card(9,7,r),card(8,6,b)).
supports(card(9,7,l),card(8,7,b)).
supports(card(9,7,r),card(8,7,b)).
supports(card(9,6,b),card(9,6,l)).
supports(card(9,6,b),card(9,6,r)).
supports(card(9,6,l),card(8,5,b)).
supports(card(9,6,r),card(8,5,b)).
supports(card(9,6,l),card(8,6,b)).
supports(card(9,6,r),card(8,6,b)).
supports(card(9,5,b),card(9,5,l)).
supports(card(9,5,b),card(9,5,r)).
supports(card(9,5,l),card(8,4,b)).
supports(card(9,5,r),card(8,4,b)).
supports(card(9,5,l),card(8,5,b)).
supports(card(9,5,r),card(8,5,b)).
supports(card(9,4,b),card(9,4,l)).
supports(card(9,4,b),card(9,4,r)).
supports(card(9,4,l),card(8,3,b)).
supports(card(9,4,r),card(8,3,b)).
supports(card(9,4,l),card(8,4,b)).
supports(card(9,4,r),card(8,4,b)).
supports(card(9,3,b),card(9,3,l)).
supports(card(9,3,b),card(9,3,r)).
supports(card(9,3,l),card(8,2,b)).
supports(card(9,3,r),card(8,2,b)).
supports(card(9,3,l),card(8,3,b)).
supports(card(9,3,r),card(8,3,b)).
supports(card(9,2,b),card(9,2,l)).
supports(card(9,2,b),card(9,2,r)).
supports(card(9,2,l),card(8,1,b)).
supports(card(9,2,r),card(8,1,b)).
supports(card(9,2,l),card(8,2,b)).
supports(card(9,2,r),card(8,2,b)).
supports(card(9,1,b),card(9,1,l)).
supports(card(9,1,b),card(9,1,r)).
supports(card(9,1,l),card(8,1,b)).
supports(card(9,1,r),card(8,1,b)).

supports(card(8,8,b),card(8,8,l)).
supports(card(8,8,b),card(8,8,r)).
supports(card(8,8,l),card(7,7,b)).
supports(card(8,8,r),card(7,7,b)).
supports(card(8,7,b),card(8,7,l)).
supports(card(8,7,b),card(8,7,r)).
supports(card(8,7,l),card(7,6,b)).
supports(card(8,7,r),card(7,6,b)).
supports(card(8,7,l),card(7,7,b)).
supports(card(8,7,r),card(7,7,b)).
supports(card(8,6,b),card(8,6,l)).
supports(card(8,6,b),card(8,6,r)).
supports(card(8,6,l),card(7,5,b)).
supports(card(8,6,r),card(7,5,b)).
supports(card(8,6,l),card(7,6,b)).
supports(card(8,6,r),card(7,6,b)).
supports(card(8,5,b),card(8,5,l)).
supports(card(8,5,b),card(8,5,r)).
supports(card(8,5,l),card(7,4,b)).
supports(card(8,5,r),card(7,4,b)).
supports(card(8,5,l),card(7,5,b)).
supports(card(8,5,r),card(7,5,b)).
supports(card(8,4,b),card(8,4,l)).
supports(card(8,4,b),card(8,4,r)).
supports(card(8,4,l),card(7,3,b)).
supports(card(8,4,r),card(7,3,b)).
supports(card(8,4,l),card(7,4,b)).
supports(card(8,4,r),card(7,4,b)).
supports(card(8,3,b),card(8,3,l)).
supports(card(8,3,b),card(8,3,r)).
supports(card(8,3,l),card(7,2,b)).
supports(card(8,3,r),card(7,2,b)).
supports(card(8,3,l),card(7,3,b)).
supports(card(8,3,r),card(7,3,b)).
supports(card(8,2,b),card(8,2,l)).
supports(card(8,2,b),card(8,2,r)).
supports(card(8,2,l),card(7,1,b)).
supports(card(8,2,r),card(7,1,b)).
supports(card(8,2,l),card(7,2,b)).
supports(card(8,2,r),card(7,2,b)).
supports(card(8,1,b),card(8,1,l)).
supports(card(8,1,b),card(8,1,r)).
supports(card(8,1,l),card(7,1,b)).
supports(card(8,1,r),card(7,1,b)).

supports(card(7,7,b),card(7,7,l)).
supports(card(7,7,b),card(7,7,r)).
supports(card(7,7,l),card(6,6,b)).
supports(card(7,7,r),card(6,6,b)).
supports(card(7,6,b),card(7,6,l)).
supports(card(7,6,b),card(7,6,r)).
supports(card(7,6,l),card(6,5,b)).
supports(card(7,6,r),card(6,5,b)).
supports(card(7,6,l),card(6,6,b)).
supports(card(7,6,r),card(6,6,b)).
supports(card(7,5,b),card(7,5,l)).
supports(card(7,5,b),card(7,5,r)).
supports(card(7,5,l),card(6,4,b)).
supports(card(7,5,r),card(6,4,b)).
supports(card(7,5,l),card(6,5,b)).
supports(card(7,5,r),card(6,5,b)).
supports(card(7,4,b),card(7,4,l)).
supports(card(7,4,b),card(7,4,r)).
supports(card(7,4,l),card(6,3,b)).
supports(card(7,4,r),card(6,3,b)).
supports(card(7,4,l),card(6,4,b)).
supports(card(7,4,r),card(6,4,b)).
supports(card(7,3,b),card(7,3,l)).
supports(card(7,3,b),card(7,3,r)).
supports(card(7,3,l),card(6,2,b)).
supports(card(7,3,r),card(6,2,b)).
supports(card(7,3,l),card(6,3,b)).
supports(card(7,3,r),card(6,3,b)).
supports(card(7,2,b),card(7,2,l)).
supports(card(7,2,b),card(7,2,r)).
supports(card(7,2,l),card(6,1,b)).
supports(card(7,2,r),card(6,1,b)).
supports(card(7,2,l),card(6,2,b)).
supports(card(7,2,r),card(6,2,b)).
supports(card(7,1,b),card(7,1,l)).
supports(card(7,1,b),card(7,1,r)).
supports(card(7,1,l),card(6,1,b)).
supports(card(7,1,r),card(6,1,b)).

supports(card(6,6,b),card(6,6,l)).
supports(card(6,6,b),card(6,6,r)).
supports(card(6,6,l),card(5,5,b)).
supports(card(6,6,r),card(5,5,b)).
supports(card(6,5,b),card(6,5,l)).
supports(card(6,5,b),card(6,5,r)).
supports(card(6,5,l),card(5,4,b)).
supports(card(6,5,r),card(5,4,b)).
supports(card(6,5,l),card(5,5,b)).
supports(card(6,5,r),card(5,5,b)).
supports(card(6,4,b),card(6,4,l)).
supports(card(6,4,b),card(6,4,r)).
supports(card(6,4,l),card(5,3,b)).
supports(card(6,4,r),card(5,3,b)).
supports(card(6,4,l),card(5,4,b)).
supports(card(6,4,r),card(5,4,b)).
supports(card(6,3,b),card(6,3,l)).
supports(card(6,3,b),card(6,3,r)).
supports(card(6,3,l),card(5,2,b)).
supports(card(6,3,r),card(5,2,b)).
supports(card(6,3,l),card(5,3,b)).
supports(card(6,3,r),card(5,3,b)).
supports(card(6,2,b),card(6,2,l)).
supports(card(6,2,b),card(6,2,r)).
supports(card(6,2,l),card(5,1,b)).
supports(card(6,2,r),card(5,1,b)).
supports(card(6,2,l),card(5,2,b)).
supports(card(6,2,r),card(5,2,b)).
supports(card(6,1,b),card(6,1,l)).
supports(card(6,1,b),card(6,1,r)).
supports(card(6,1,l),card(5,1,b)).
supports(card(6,1,r),card(5,1,b)).

supports(card(5,5,b),card(5,5,l)).
supports(card(5,5,b),card(5,5,r)).
supports(card(5,5,l),card(4,4,b)).
supports(card(5,5,r),card(4,4,b)).
supports(card(5,4,b),card(5,4,l)).
supports(card(5,4,b),card(5,4,r)).
supports(card(5,4,l),card(4,3,b)).
supports(card(5,4,r),card(4,3,b)).
supports(card(5,4,l),card(4,4,b)).
supports(card(5,4,r),card(4,4,b)).
supports(card(5,3,b),card(5,3,l)).
supports(card(5,3,b),card(5,3,r)).
supports(card(5,3,l),card(4,2,b)).
supports(card(5,3,r),card(4,2,b)).
supports(card(5,3,l),card(4,3,b)).
supports(card(5,3,r),card(4,3,b)).
supports(card(5,2,b),card(5,2,l)).
supports(card(5,2,b),card(5,2,r)).
supports(card(5,2,l),card(4,1,b)).
supports(card(5,2,r),card(4,1,b)).
supports(card(5,2,l),card(4,2,b)).
supports(card(5,2,r),card(4,2,b)).
supports(card(5,1,b),card(5,1,l)).
supports(card(5,1,b),card(5,1,r)).
supports(card(5,1,l),card(4,1,b)).
supports(card(5,1,r),card(4,1,b)).

supports(card(4,4,b),card(4,4,l)).
supports(card(4,4,b),card(4,4,r)).
supports(card(4,4,l),card(3,3,b)).
supports(card(4,4,r),card(3,3,b)).
supports(card(4,3,b),card(4,3,l)).
supports(card(4,3,b),card(4,3,r)).
supports(card(4,3,l),card(3,2,b)).
supports(card(4,3,r),card(3,2,b)).
supports(card(4,3,l),card(3,3,b)).
supports(card(4,3,r),card(3,3,b)).
supports(card(4,2,b),card(4,2,l)).
supports(card(4,2,b),card(4,2,r)).
supports(card(4,2,l),card(3,1,b)).
supports(card(4,2,r),card(3,1,b)).
supports(card(4,2,l),card(3,2,b)).
supports(card(4,2,r),card(3,2,b)).
supports(card(4,1,b),card(4,1,l)).
supports(card(4,1,b),card(4,1,r)).
supports(card(4,1,l),card(3,1,b)).
supports(card(4,1,r),card(3,1,b)).

supports(card(3,3,b),card(3,3,l)).
supports(card(3,3,b),card(3,3,r)).
supports(card(3,3,l),card(2,2,b)).
supports(card(3,3,r),card(2,2,b)).
supports(card(3,2,b),card(3,2,l)).
supports(card(3,2,b),card(3,2,r)).
supports(card(3,2,l),card(2,1,b)).
supports(card(3,2,r),card(2,1,b)).
supports(card(3,2,l),card(2,2,b)).
supports(card(3,2,r),card(2,2,b)).
supports(card(3,1,b),card(3,1,l)).
supports(card(3,1,b),card(3,1,r)).
supports(card(3,1,l),card(2,1,b)).
supports(card(3,1,r),card(2,1,b)).

supports(card(2,2,b),card(2,2,l)).
supports(card(2,2,b),card(2,2,r)).
supports(card(2,2,l),card(1,1,b)).
supports(card(2,2,r),card(1,1,b)).
supports(card(2,1,b),card(2,1,l)).
supports(card(2,1,b),card(2,1,r)).
supports(card(2,1,l),card(1,1,b)).
supports(card(2,1,r),card(1,1,b)).

supports(card(1,1,b),card(1,1,l)).
supports(card(1,1,b),card(1,1,r)).

supports(soil,card(15,15,b)).
supports(soil,card(15,14,b)).
supports(soil,card(15,13,b)).
supports(soil,card(15,12,b)).
supports(soil,card(15,11,b)).
supports(soil,card(15,10,b)).
supports(soil,card(15,9,b)).
supports(soil,card(15,8,b)).
supports(soil,card(15,7,b)).
supports(soil,card(15,6,b)).
supports(soil,card(15,5,b)).
supports(soil,card(15,4,b)).
supports(soil,card(15,3,b)).
supports(soil,card(15,2,b)).
supports(soil,card(15,1,b)).
height(15).


%END-GENERATED
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

takePart(X,List0,List1):-
    append(LeftRest,[X|RightRest],List0),
    append(LeftRest, RightRest,List1).

%%%% to avoid hand-typing the facts above
%%% write_cards(height)

write_house(L):-
    write_partslist(L),nl,
    write_cards(L),
    write_soil(L),nl,
    write(height(L)),write('.'),nl.

write_cards(0):- !.
write_cards(L):-
   write_triangles(L),
   L1 is L-1, write_cards(L1).

write_triangles(L):- write_triangles(L,L).

write_triangles(_,0):- !,nl.
write_triangles(L,N):-
   ws(L,N,b, L,N,l),
   ws(L,N,b, L,N,r),
   Above is L-1, LeftOne is N-1,
   (N \= 1 -> ws(L,N,l, Above,LeftOne,b),ws(L,N,r, Above,LeftOne,b) ; true),
   (N \= L -> ws(L,N,l, Above,N,      b),ws(L,N,r, Above,N,      b) ; true),
   write_triangles(L,LeftOne).





ws(L1,T1,BLR1, L2,T2,BLR2):-
    write(supports(card(L1,T1,BLR1), card(L2,T2,BLR2))), write('.'),nl.


write_partslist(L):-
    write('parts(['), wp(L), write(']).'),nl.

wp(L):- wpl(L).

wpl(1):- !, wpt(1,1).

wpl(N):- wpts(N,N), N1 is N-1, wpl(N1).

wpts(_,0):- !.

wpts(L,N):- 
   write(card(L,N,b)), write(', '),
   write(card(L,N,l)), write(', '),
   write(card(L,N,r)), write(', '),
   N1 is N-1, wpts(L,N1).


wpt(L,N):-
   write(card(L,N,b)), write(', '),
   write(card(L,N,l)), write(', '),
   write(card(L,N,r)).

write_soil(L):- write_soil(L,L).

write_soil(_,0):- !.

write_soil(L,N):-
       write(supports(soil, card(L,N,b))), write('.'),nl,
       N1 is N-1, write_soil(L,N1).