select([A|As],S):- select(A,S,S1),select(As,S1).
select([],_).
next_to(A,B,C):- left_of(A,B,C) ; left_of(B,A,C).
left_of(A,B,C):- append(_,[A,B|_],C).
is_middle(A,L):- is_middle(A,L,L).
is_middle(A,[_,_|L],[_|R]):- is_middle(A,L,R).
is_middle(A,[_],[A|_]).
zebra(Owns, Hs):- % color,nation,pet,drink,smokes
length(Hs,5), %% 1
H2 = h(red,english,_,_,_), member( H2, Hs),
H3 = h(_,swede,dog,_,_), member( H3, Hs),
H4 = h(_,dane,_,tea,_), member( H4, Hs),
left_of( h(green,_,_,_,_), h(white,_,_,_,_), Hs), %% 5
H6 = h(green,_,_,coffee,_), member( H6, Hs),
H7 = h(_,_,birds,_,pallmall), member( H7, Hs),
H8 = h(yellow,_,_,_,dunhill), member( H8, Hs),
H9 = h(_,_,_,milk,_), is_middle(H9, Hs),
Hs = [ h(_,norwegian,_,_,_)|_], %% 10
next_to( h(_,_,_,_,blend), h(_,_,cats, _,_), Hs),
next_to( h(_,_,_,_,dunhill), h(_,_,horse,_,_), Hs),
H13 = h(_,_,_,beer,bluemaster), member( H13, Hs),
H14 = h(_,german,_,_,prince), member( H14, Hs),
next_to( h(_,norwegian,_,_,_), h(blue,_,_,_,_), Hs), %% 15
next_to( h(_,_,_,_,blend), h(_,_,_,water,_), Hs),
member( h(_,Owns,zebra,_,_), Hs).
main :-
;
write('No more solutions.').
c2VsZWN0KFtBfEFzXSxTKTotIHNlbGVjdChBLFMsUzEpLHNlbGVjdChBcyxTMSkuCnNlbGVjdChbXSxfKS4gCiAKbmV4dF90byhBLEIsQyk6LSBsZWZ0X29mKEEsQixDKSA7IGxlZnRfb2YoQixBLEMpLgpsZWZ0X29mKEEsQixDKTotIGFwcGVuZChfLFtBLEJ8X10sQykuCgppc19taWRkbGUoQSxMKTotIGlzX21pZGRsZShBLEwsTCkuCmlzX21pZGRsZShBLFtfLF98TF0sW198Ul0pOi0gaXNfbWlkZGxlKEEsTCxSKS4KaXNfbWlkZGxlKEEsW19dLFtBfF9dKS4KIAp6ZWJyYShPd25zLCBIcyk6LSAgJSBjb2xvcixuYXRpb24scGV0LGRyaW5rLHNtb2tlcwogICAgICBsZW5ndGgoSHMsNSksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICUlIDEKICAgICAgSDIgICA9ICAgaChyZWQsZW5nbGlzaCxfLF8sXyksICAgICBtZW1iZXIoICAgSDIsICAgICBIcyksCiAgICAgIEgzICAgPSAgIGgoXyxzd2VkZSxkb2csXyxfKSwgICAgICAgbWVtYmVyKCAgIEgzLCAgICAgSHMpLAogICAgICBINCAgID0gICBoKF8sZGFuZSxfLHRlYSxfKSwgICAgICAgIG1lbWJlciggICBINCwgICAgIEhzKSwKICAgICAgbGVmdF9vZiggaChncmVlbixfLF8sXyxfKSwgICAgICAgICBoKHdoaXRlLF8sXyxfLF8pLCBIcyksICAlJSA1CiAgICAgIEg2ICAgPSAgIGgoZ3JlZW4sXyxfLGNvZmZlZSxfKSwgICAgbWVtYmVyKCAgIEg2LCAgICAgSHMpLAogICAgICBINyAgID0gICBoKF8sXyxiaXJkcyxfLHBhbGxtYWxsKSwgIG1lbWJlciggICBINywgICAgIEhzKSwKICAgICAgSDggICA9ICAgaCh5ZWxsb3csXyxfLF8sZHVuaGlsbCksICBtZW1iZXIoICAgSDgsICAgICBIcyksCiAgICAgIEg5ICAgPSAgIGgoXyxfLF8sbWlsayxfKSwgICAgICAgICAgaXNfbWlkZGxlKEg5LCAgICAgSHMpLAogICAgICBIcyAgID0gWyBoKF8sbm9yd2VnaWFuLF8sXyxfKXxfXSwgICAgICAgICAgICAgICAgICAgICAgICAgICUlIDEwIAogICAgICBuZXh0X3RvKCBoKF8sXyxfLF8sYmxlbmQpLCAgICAgICAgIGgoXyxfLGNhdHMsIF8sXyksIEhzKSwKICAgICAgbmV4dF90byggaChfLF8sXyxfLGR1bmhpbGwpLCAgICAgICBoKF8sXyxob3JzZSxfLF8pLCBIcyksCiAgICAgIEgxMyAgPSAgIGgoXyxfLF8sYmVlcixibHVlbWFzdGVyKSwgbWVtYmVyKCAgIEgxMywgICAgSHMpLAogICAgICBIMTQgID0gICBoKF8sZ2VybWFuLF8sXyxwcmluY2UpLCAgIG1lbWJlciggICBIMTQsICAgIEhzKSwKICAgICAgbmV4dF90byggaChfLG5vcndlZ2lhbixfLF8sXyksICAgICBoKGJsdWUsXyxfLF8sXyksICBIcyksICAlJSAxNQogICAgICBuZXh0X3RvKCBoKF8sXyxfLF8sYmxlbmQpLCAgICAgICAgIGgoXyxfLF8sd2F0ZXIsXyksIEhzKSwKICAgICAgbWVtYmVyKCAgaChfLE93bnMsemVicmEsXyxfKSwgICAgICAgICAgICAgICAgICAgICAgICBIcykuCgptYWluIDotIAogICAgemVicmEoV2hvLCBIUyksIG1hcGxpc3Qod3JpdGVsbixIUyksIG5sLCB3cml0ZShXaG8pLCBubCwgbmwsIGZhaWwgCiAgICA7CiAgICB3cml0ZSgnTm8gbW9yZSBzb2x1dGlvbnMuJyku