#!/usr/local/bin/python3 sta = 'yamada' b = [('suzuki', 'satou'), ('yamada', 'tanaka'), ('tanaka', 'satou'), ('watanabe', 'suzuki')] nodes = {} runners = set() for x, y in b: nodes.setdefault(x, []).append(y) nodes.setdefault(y, []).append(x) runners.add(x) runners.add(y) baton_holder = sta ans = [baton_holder] for _ in range(len(runners)-1): runners.remove(baton_holder) candidates = nodes[baton_holder] for baton_holder in candidates: if baton_holder in runners: break ans.append(baton_holder) print(ans)