houses([
house(first, _, _ ),
house(second, _, _ ),
house(third, _, _ ),
house(forth, _, _ )
]).
left_of(A, B, [A, B | _]).
left_of(A, B, [_ | Y]) :- left_of(A, B, Y).
right_of(A, B, [B, A | _]).
right_of(A, B, [_ | Y]) :- right_of(A, B, Y).
next_to(A, B, [A, B | _]).
next_to(A, B, [B, A | _]).
next_to(A, B, [_ | Y]) :- next_to(A, B, Y).
mymember(X, [X|_]).
mymember(X, [_|Y]) :- mymember(X, Y).
not_in(_,[]).
not_in(X,[_|A]):-not_in(X,A).
not_trainer(H):-mymember(house(_,roman,hunter),H).
not_trainer(H):-mymember(house(_,roman,doctor),H).
not_trainer(H):-mymember(house(_,roman,painter),H).
not_trainer
(H
):-mymember
(house
(_
,roman
,trainer
),H
),!,fail.
print_houses([]).
print_houses([A|B]) :-
print_houses(B).
false(_).
solve(H):-houses(H),
next_to(house(_,_,painter),
house(_,_,trainer),H),
next_to(house(_,_,doctor),
house(_,_,painter),H),
left_of(house(_,_,hunter),
house(_,_,doctor),H),
false(next_to(house(_,_,trainer),
house(_,_,hunter),H)),
right_of(house(_,_,painter),
house(_,semen,_),H),
next_to(house(_,semen,_),
house(_,nikolay,_),H),
false(next_to(house(_,artur,_),
house(_,roman,_),H
)),
not_trainer(H),
mymember(house(_,roman,_), H),
mymember(house(_,artur,_), H),
mymember(house(_,semen,_), H),
mymember(house(_,nikolay,_), H),
print_houses(H).
:-solve(_).
aG91c2VzKFsKICAgICAgICBob3VzZShmaXJzdCwgXywgXyApLAogICAgICAgIGhvdXNlKHNlY29uZCwgXywgXyApLAogICAgICAgIGhvdXNlKHRoaXJkLCBfLCBfICksCiAgICAgICAgaG91c2UoZm9ydGgsIF8sIF8gKQpdKS4KCmxlZnRfb2YoQSwgQiwgW0EsIEIgfCBfXSkuCmxlZnRfb2YoQSwgQiwgW18gfCBZXSkgOi0gbGVmdF9vZihBLCBCLCBZKS4KIApyaWdodF9vZihBLCBCLCBbQiwgQSB8IF9dKS4KcmlnaHRfb2YoQSwgQiwgW18gfCBZXSkgOi0gcmlnaHRfb2YoQSwgQiwgWSkuCiAKbmV4dF90byhBLCBCLCBbQSwgQiB8IF9dKS4KbmV4dF90byhBLCBCLCBbQiwgQSB8IF9dKS4KbmV4dF90byhBLCBCLCBbXyB8IFldKSA6LSBuZXh0X3RvKEEsIEIsIFkpLgogCm15bWVtYmVyKFgsIFtYfF9dKS4KbXltZW1iZXIoWCwgW198WV0pIDotIG15bWVtYmVyKFgsIFkpLgogCm5vdF9pbihfLFtdKS4Kbm90X2luKFgsW1h8X10pOi0hLGZhaWwuCm5vdF9pbihYLFtffEFdKTotbm90X2luKFgsQSkuCiAKbm90X3RyYWluZXIoSCk6LW15bWVtYmVyKGhvdXNlKF8scm9tYW4saHVudGVyKSxIKS4Kbm90X3RyYWluZXIoSCk6LW15bWVtYmVyKGhvdXNlKF8scm9tYW4sZG9jdG9yKSxIKS4Kbm90X3RyYWluZXIoSCk6LW15bWVtYmVyKGhvdXNlKF8scm9tYW4scGFpbnRlciksSCkuCm5vdF90cmFpbmVyKEgpOi1teW1lbWJlcihob3VzZShfLHJvbWFuLHRyYWluZXIpLEgpLCEsZmFpbC4KIApwcmludF9ob3VzZXMoW10pLgpwcmludF9ob3VzZXMoW0F8Ql0pIDotCiAgICAgICAgd3JpdGUoQSksIG5sLAogICAgICAgIHByaW50X2hvdXNlcyhCKS4KCmZhbHNlKFgpOi1YLCEsZmFpbC4KZmFsc2UoXykuCgpzb2x2ZShIKTotaG91c2VzKEgpLAogICAgICAgICAgICAgICBuZXh0X3RvKGhvdXNlKF8sXyxwYWludGVyKSwKICAgICAgICAgICAgICAgICAgICAgICBob3VzZShfLF8sdHJhaW5lciksSCksCiAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgIG5leHRfdG8oaG91c2UoXyxfLGRvY3RvciksCiAgICAgICAgICAgICAgICAgICAgICAgaG91c2UoXyxfLHBhaW50ZXIpLEgpLAogICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICBsZWZ0X29mKGhvdXNlKF8sXyxodW50ZXIpLAogICAgICAgICAgICAgICAgICAgICAgIGhvdXNlKF8sXyxkb2N0b3IpLEgpLAogICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICBmYWxzZShuZXh0X3RvKGhvdXNlKF8sXyx0cmFpbmVyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBob3VzZShfLF8saHVudGVyKSxIKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICByaWdodF9vZihob3VzZShfLF8scGFpbnRlciksCiAgICAgICAgICAgICAgICAgICAgICAgIGhvdXNlKF8sc2VtZW4sXyksSCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICBuZXh0X3RvKGhvdXNlKF8sc2VtZW4sXyksCiAgICAgICAgICAgICAgICAgICAgICAgaG91c2UoXyxuaWtvbGF5LF8pLEgpLAogICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICBmYWxzZShuZXh0X3RvKGhvdXNlKF8sYXJ0dXIsXyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG91c2UoXyxyb21hbixfKSxICiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgIG5vdF90cmFpbmVyKEgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgIG15bWVtYmVyKGhvdXNlKF8scm9tYW4sXyksIEgpLAogICAgICAgICAgICAgICBteW1lbWJlcihob3VzZShfLGFydHVyLF8pLCBIKSwKICAgICAgICAgICAgICAgbXltZW1iZXIoaG91c2UoXyxzZW1lbixfKSwgSCksCiAgICAgICAgICAgICAgIG15bWVtYmVyKGhvdXNlKF8sbmlrb2xheSxfKSwgSCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICBwcmludF9ob3VzZXMoSCkuCiAKOi1zb2x2ZShfKS4=