def group(items):
iterator = iter(items)
group = [next(iterator)]
result =[group]
for item in iterator:
(a, b), (c, d) = item, group[-1]
if a in (c, d) or b in (c, d):
group.append(item)
else:
group = [item]
result.append(group)
return result
print(group([(1,2),(2,3),(3,4),(7,8),(8,9),(2,1),(2,3),(1,4)]))
ZGVmIGdyb3VwKGl0ZW1zKToKICBpdGVyYXRvciA9IGl0ZXIoaXRlbXMpCiAgZ3JvdXAgPSBbbmV4dChpdGVyYXRvcildCiAgcmVzdWx0ID1bZ3JvdXBdCiAgZm9yIGl0ZW0gaW4gaXRlcmF0b3I6CiAgICAoYSwgYiksIChjLCBkKSA9IGl0ZW0sIGdyb3VwWy0xXQogICAgaWYgYSBpbiAoYywgZCkgb3IgYiBpbiAoYywgZCk6CiAgICAgIGdyb3VwLmFwcGVuZChpdGVtKQogICAgZWxzZToKICAgICAgZ3JvdXAgPSBbaXRlbV0KICAgICAgcmVzdWx0LmFwcGVuZChncm91cCkKIAogIHJldHVybiByZXN1bHQKCnByaW50KGdyb3VwKFsoMSwyKSwoMiwzKSwoMyw0KSwoNyw4KSwoOCw5KSwoMiwxKSwoMiwzKSwoMSw0KV0pKQ==
[[(1, 2), (2, 3), (3, 4)], [(7, 8), (8, 9)], [(2, 1), (2, 3)], [(1, 4)]]