code: def topological_order_dfs(graph):
      n = len(graph)
      order = []
      times_seen = [-1] * n
      for start in range(n):
          if times_seen[start] == -1:
              times_seen[start] = 0
              to_visit = [start]
              while to_visit:
                  node = to_visit[-1]
                  children = graph[node]
                  if times_seen[node] == len(children):
                      to_visit.pop()
                      order.append(node)
                  else:
                      child = children[times_seen[node]]
                      times_seen[node] += 1
                      if times_seen[child] == -1:
                          times_seen[child] = 0
                          to_visit.append(child)
      return order[::-1]