vedle(X, Y, S):-nalevo(X,Y,S);
                nalevo(Y,X,S).

nalevo(X, Y, [X, Y | _]).
nalevo(X, Y, [_ | Tail]) :- nalevo(X, Y, Tail).

vyres_hadanku(Ulice) :-

	Ulice = [Prvni,_,Treti,_,_],

	%absolvent ZČU žije v červeném domě,

	member(dum(zcu,cervena,_,_,_), Ulice),

	%absolvent ČVUT chová psa,

	member(dum(cvut,_,pes,_,_), Ulice),

	%absolvent UP pije čaj,

	member(dum(up,_,_,caj,_), Ulice),

	%absolvent MFF programuje v Prologu,
	member(dum(mff,_,_,_,prolog), Ulice),

	%absolvent MU bydlí v prvním domě,

	Prvni = dum(mu,_,_,_,_),

	%obyvatel zeleného domu pije biomléko,
	member(dum(_,zelena,_,biomleko,_),Ulice),
	print_term(Ulice,[]),
	%programátor v Jávě pije pivo,
	member(dum(_,_,_,pivo,java),Ulice),
	%obyvatel žlutého domu programuje v Haskellu,
	member(dum(_,zluta,_,_,haskell), Ulice),
	%programátor v C chová papouška,
	member(dum(_,_,papousek,_,c), Ulice),

	%obyvatel prostředního domu pije kávu,
	Treti = dum(_,_,_,kava,_),

	%programátor v C bydlí vedle chovatele kočky,
	vedle(dum(_,_,_,_,c),
	      dum(_,_,kocka,_,_), Ulice),
	%chovatel koně bydlí vedle programátora v Haskellu,
	vedle(dum(_,_,kun,_,_),dum(_,_,_,_,haskell), Ulice),
	%absolvent MU bydlí vedle modrého domu,
	vedle(dum(mu,_,_,_,_),
	      dum(_,modra,_,_,_),Ulice),

	%programátor v C# má souseda, který pije víno,
	vedle(dum(_,_,_,_,cis),
	      dum(_,_,_,vino,_),Ulice),

	%zelený dům stojí nalevo od bílého domu,
	nalevo(dum(_,zelena,_,_,_),dum(_,bila,_,_,_), Ulice),
	%a někde tam je schovaná zbytková zebra
	member(dum(_,_,zebra,_,_), Ulice).

spoj([],C,C).
spoj([AH | AT],B,[AH | V]) :- spoj(AT, B, V).

zplosti([],[]).
zplosti([[]|T],T1) :- zplosti(T, T1).
zplosti([[H|T]|T1],T2) :-!,
	zplosti([H|T],V1),
	zplosti(T1,V2),
	spoj(V1,V2,T2).
zplosti([X|T], [X|V1]) :-
	zplosti(T,V1).

split5([],[],[]).
split5([H|T],R1,R2):-
	H < 5,!,
	R1=[H|T1],
	split5(T,T1,R2);
	R2=[H|T2],
	split5(T,R1,T2).

not(X) :- X,!, fail.

not(X).

klesajici([_]).
klesajici([H1,H2|T]) :-
	H1 >= H2, !,
	klesajici([H2|T]).


rozdel(S,Z,P,K) :-
	spoj(Z,[P|K],S),
	klesajici(K), !.
