% guess in(X) v out(X) :- node(X). % enforce condition 1 :- in(X), in(Y), monochrome_path(X,Y,C). % auxiliary predicate monochrome_path(X,Y,C) :- edge(X,Y,C). monochrome_path(X,Y,C) :- monochrome_path(X,Z,C), edge(Z,Y,C). % enforce condition 2 connected(X) :- edge(X, A, B), in(Y), monochrome_path(X,Y,C), X != Y. :- out(X), not connected(X).