person(alec).
person(cameron).
person(emilio).
person(serenity).

butterfly( lycaenidae ).
butterfly( nymphalidae ).
butterfly( pieridae ).
butterfly( riodinidae ).

thing( belt ).
thing( earrings ).
thing( purse ).
thing( shoes ).

ftime(630).
ftime(930).
ftime(1200).
ftime(1830).

earlier(A, B) :- A < B.

times( [ flightTime( 630, _, _, _ ),
					flightTime( 930, _, _, _ ),
					flightTime( 1200, _, _, _ ),
					flightTime( 1830, _, _, _ ) ] ).

		group( X ) :- times( X ),
		member( flightTime( 630, A, B, C ), X ), person(A), butterfly( B ), thing( C), A \= emilio, 
		member( flightTime( 930, T, U, V), X), person(T), butterfly(U), thing(V), T \= cameron,
		member( flightTime( 1200, XX, YY, ZZ), X), person(XX), butterfly(YY), thing(ZZ),
		member( flightTime( 1830, XXX, YYY, ZZZ), X), person(XXX), butterfly(YYY), thing(ZZZ),
		A \= T, B \= U,  C \= V, A \= XX, B \= YY, C \= ZZ, A \= XXX, B \= YYY, C \= ZZZ, T \= XX, U \= YY, X \= ZZ,
		T \= XXX, U \= YYY,  V \= ZZZ, XX \= XXX, YY \= YYY, ZZ \= ZZZ,
		member( flightTime( D, E, pieridae, earrings ), X ), person(E), ftime(D),
		member( flightTime( F, G, H, belt ), X ), person(G), butterfly( H ), ftime(F), G \= alec, H \= lycaenidae, 
		member( flightTime( I, alec, J, K ), X ), butterfly( J ), thing( K), ftime(I),
		member( flightTime( L, M, N, purse ), X ), earlier(I, L), person(M), butterfly(N), ftime(L), M \= alec, 
		member( flightTime( O, serenity, P, Q), X ), butterfly(P), thing(Q), ftime(O), P \= shoes, Q \= lycaenidae, 
		member( flightTime( R, emilio, pieridae, S ), X), thing(S), ftime(R),
		member( flightTime( W, Z, Y, purse), X), person(Z), butterfly(Y), ftime(W), Y \= nymphalidae, 
		member( flightTime( AA, emilio, BB, CC ), X), butterfly(BB), thing(CC), ftime(AA), CC \= belt, CC \= shoes, 
		member( flightTime( DD, EE, pieridae, FF), X), person(EE), thing(FF), ftime(DD),
		member( flightTime( GG, HH, II, shoes), X ), earlier( DD, GG ), person(HH), butterfly(II), ftime(GG),
		member( flightTime( JJ, KK, LL, earrings ), X ), person(KK), butterfly(LL), ftime(JJ), JJ \= 630, JJ \= 1830, 
		member( flightTime( MM, NN, riodinidae, OO), X), person(NN), thing(OO), ftime(MM), MM \= 630, MM \= 1830.
