from collections import deque
def well_connections(wells):
common = set.intersection(*({name for *_, name in well} for well in wells))
wells = list(map(deque, wells))
this = 0
while all(wells):
if all(well[0][2] in common for well in wells):
yield tuple(well[0][1] for well in wells)
if len(wells[this]) > 1 and wells[this][1][2] in common:
this = 1 - this
wells[this].popleft()
while wells[this] and wells[this][0][2] not in common:
yield tuple(well[0][1] for well in wells)
wells[this].popleft()
this = 1 - this
wells[this].popleft()
wells = [
[
[0, 0.4, 'pop'],
[0.4, 0.8, 'sup'],
[0.8, 1.2, 'muka'],
[1.2, 2, 'sand'],
[2, 2.4, 'buz']
],
[
[0, 0.4, 'pop'],
[0.4, 1.6, 'sand'],
[1.6, 2, 'graviy'],
[2, 3.2, 'galka'],
[3.2, 3.6, 'buz']
]
]
print(list(well_connections(wells)))
ZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgZGVxdWUKCmRlZiB3ZWxsX2Nvbm5lY3Rpb25zKHdlbGxzKToKICAgIGNvbW1vbiA9IHNldC5pbnRlcnNlY3Rpb24oKih7bmFtZSBmb3IgKl8sIG5hbWUgaW4gd2VsbH0gZm9yIHdlbGwgaW4gd2VsbHMpKQogICAgd2VsbHMgPSBsaXN0KG1hcChkZXF1ZSwgd2VsbHMpKQogICAgdGhpcyA9IDAKICAgIHdoaWxlIGFsbCh3ZWxscyk6CiAgICAgICAgaWYgYWxsKHdlbGxbMF1bMl0gaW4gY29tbW9uIGZvciB3ZWxsIGluIHdlbGxzKToKICAgICAgICAgICAgeWllbGQgdHVwbGUod2VsbFswXVsxXSBmb3Igd2VsbCBpbiB3ZWxscykKICAgICAgICAgICAgaWYgbGVuKHdlbGxzW3RoaXNdKSA+IDEgYW5kIHdlbGxzW3RoaXNdWzFdWzJdIGluIGNvbW1vbjoKICAgICAgICAgICAgICAgIHRoaXMgPSAxIC0gdGhpcwogICAgICAgICAgICB3ZWxsc1t0aGlzXS5wb3BsZWZ0KCkKICAgICAgICB3aGlsZSB3ZWxsc1t0aGlzXSBhbmQgd2VsbHNbdGhpc11bMF1bMl0gbm90IGluIGNvbW1vbjoKICAgICAgICAgICAgeWllbGQgdHVwbGUod2VsbFswXVsxXSBmb3Igd2VsbCBpbiB3ZWxscykKICAgICAgICAgICAgd2VsbHNbdGhpc10ucG9wbGVmdCgpCiAgICAgICAgdGhpcyA9IDEgLSB0aGlzCiAgICAgICAgd2VsbHNbdGhpc10ucG9wbGVmdCgpCgp3ZWxscyA9IFsKICAgIFsKICAgICAgICBbMCwgMC40LCAncG9wJ10sCiAgICAgICAgWzAuNCwgMC44LCAnc3VwJ10sCiAgICAgICAgWzAuOCwgMS4yLCAnbXVrYSddLAogICAgICAgIFsxLjIsIDIsICdzYW5kJ10sCiAgICAgICAgWzIsIDIuNCwgJ2J1eiddCiAgICBdLAogICAgWwogICAgICAgIFswLCAwLjQsICdwb3AnXSwKICAgICAgICBbMC40LCAxLjYsICdzYW5kJ10sCiAgICAgICAgWzEuNiwgMiwgJ2dyYXZpeSddLAogICAgICAgIFsyLCAzLjIsICdnYWxrYSddLAogICAgICAgIFszLjIsIDMuNiwgJ2J1eiddCiAgICBdCl0KcHJpbnQobGlzdCh3ZWxsX2Nvbm5lY3Rpb25zKHdlbGxzKSkp
[(0.4, 0.4), (0.8, 0.4), (1.2, 0.4), (2, 1.6), (2, 2), (2, 3.2), (2.4, 3.6)]