q(nil).
q(cons(X1,X2)) :- tree_3n_plus_2(X1), even(X1), tree_3n_plus_2(X2), list_even(X2).
two_mod_3(s(X)) :- one_mod_3(X).
odd(s(X)) :- even(X).
zero_mod_3(o).
zero_mod_3(s(X)) :- two_mod_3(X).
one_mod_3(s(X)) :- zero_mod_3(X).
tree_3n_plus_2(nil).
tree_3n_plus_2(s(X)) :- one_mod_3(X).
tree_3n_plus_2(cons(X1,X2)) :- tree_3n_plus_2(X1), tree_3n_plus_2(X2).
list_even(nil).
list_even(cons(X1,X2)) :- even(X1), list_even(X2).
even(o).
even(s(X)) :- odd(X).
