res = lambda a, b: [(a[i], b[(i+1)%2]) for i in [0,1] if a[(i+1)%2] == b[i]]
def isconsistent(inequations):
pending, done, hashes = [inequations[:], [], set()]
while pending:
p = pending.pop()
if p[0] == p[1]:
return False
for n in (n for d in done for n in res(p, d) if "%s<%s"%n not in hashes):
hashes.add("%s<%s"%n)
pending.append(n)
done.append(p)
return True
print(isconsistent([("A", "B"), ("B", "C"), ("C", "D")]))
print(isconsistent([("A", "B"), ("B", "C"), ("C", "A")]))
cmVzID0gbGFtYmRhIGEsIGI6IFsoYVtpXSwgYlsoaSsxKSUyXSkgZm9yIGkgaW4gWzAsMV0gaWYgYVsoaSsxKSUyXSA9PSBiW2ldXQoKZGVmIGlzY29uc2lzdGVudChpbmVxdWF0aW9ucyk6CiAgcGVuZGluZywgZG9uZSwgaGFzaGVzID0gW2luZXF1YXRpb25zWzpdLCBbXSwgc2V0KCldCiAgd2hpbGUgcGVuZGluZzoKICAgIHAgPSBwZW5kaW5nLnBvcCgpCiAgICBpZiBwWzBdID09IHBbMV06CiAgICAgIHJldHVybiBGYWxzZQogICAgZm9yIG4gaW4gKG4gZm9yIGQgaW4gZG9uZSBmb3IgbiBpbiByZXMocCwgZCkgaWYgIiVzPCVzIiVuIG5vdCBpbiBoYXNoZXMpOgogICAgICBoYXNoZXMuYWRkKCIlczwlcyIlbikKICAgICAgcGVuZGluZy5hcHBlbmQobikKICAgIGRvbmUuYXBwZW5kKHApCiAgcmV0dXJuIFRydWUKCnByaW50KGlzY29uc2lzdGVudChbKCJBIiwgIkIiKSwgKCJCIiwgIkMiKSwgKCJDIiwgIkQiKV0pKQpwcmludChpc2NvbnNpc3RlbnQoWygiQSIsICJCIiksICgiQiIsICJDIiksICgiQyIsICJBIildKSk=