resolve = lambda a, b: [(a[0], b[1])] if a[1] == b[0] else []
def isconsistent(inequations):
pending = inequations[:]
done = []
hashes = set()
while pending:
c = pending.pop()
if c[0] == c[1]:
return False
for i in done:
n = resolve(c, i) + resolve(i, c)
for e in n:
h = "%s<%s"%e
if h in hashes:
continue
hashes.add(h)
pending.append(e)
done.append(c)
return True
print(isconsistent([("A", "B"),("B", "C"),("C", "D")]))
print(isconsistent([("A", "B"),("B", "C"),("C", "A")]))
cmVzb2x2ZSA9IGxhbWJkYSBhLCBiOiBbKGFbMF0sIGJbMV0pXSBpZiBhWzFdID09IGJbMF0gZWxzZSBbXQoKZGVmIGlzY29uc2lzdGVudChpbmVxdWF0aW9ucyk6CiAgcGVuZGluZyA9IGluZXF1YXRpb25zWzpdCiAgZG9uZSA9IFtdCiAgaGFzaGVzID0gc2V0KCkKICB3aGlsZSBwZW5kaW5nOgogICAgYyA9IHBlbmRpbmcucG9wKCkKICAgIGlmIGNbMF0gPT0gY1sxXToKICAgICAgcmV0dXJuIEZhbHNlCiAgICBmb3IgaSBpbiBkb25lOgogICAgICBuID0gcmVzb2x2ZShjLCBpKSArIHJlc29sdmUoaSwgYykKICAgICAgZm9yIGUgaW4gbjoKICAgICAgICBoID0gIiVzPCVzIiVlCiAgICAgICAgaWYgaCBpbiBoYXNoZXM6CiAgICAgICAgICBjb250aW51ZQogICAgICAgIGhhc2hlcy5hZGQoaCkKICAgICAgICBwZW5kaW5nLmFwcGVuZChlKQogICAgZG9uZS5hcHBlbmQoYykKICByZXR1cm4gVHJ1ZQogIApwcmludChpc2NvbnNpc3RlbnQoWygiQSIsICJCIiksKCJCIiwgIkMiKSwoIkMiLCAiRCIpXSkpCnByaW50KGlzY29uc2lzdGVudChbKCJBIiwgIkIiKSwoIkIiLCAiQyIpLCgiQyIsICJBIildKSkK