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