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]
docs: Topological sorting by depth first search
  
      :param graph: directed graph in listlist format, cannot be listdict
      :returns: list of vertices in order
      :complexity: `O(|V|+|E|)`