deftopo_sort(graph): lst = [] in_degree = defaultdict(int) for u in graph: for v in graph[u]: in_degree[v] += 1
s = deque([u for u in graph if in_degree[u] == 0]) while s: lst.append(n := s.popleft()) for m in graph.get(n, []): in_degree[m] -= 1 if in_degree[m] == 0: s.append(m)