code: def findOrder(self, numCourses, prerequisites):
      """
      :type numCourses: int
      :type prerequisites: List[List[int]]
      :rtype: List[int]
      """
  
      # Prepare the graph
      adj_list = defaultdict(list)
      indegree = {}
      for dest, src in prerequisites:
          adj_list[src].append(dest)
  
          # Record each node's in-degree
          indegree[dest] = indegree.get(dest, 0) + 1
  
      # Queue for maintainig list of nodes that have 0 in-degree
      zero_indegree_queue = deque(
          [k for k in range(numCourses) if k not in indegree]
      )
  
      topological_sorted_order = []
  
      # Until there are nodes in the Q
      while zero_indegree_queue:
          # Pop one node with 0 in-degree
          vertex = zero_indegree_queue.popleft()
          topological_sorted_order.append(vertex)
  
          # Reduce in-degree for all the neighbors
          if vertex in adj_list:
              for neighbor in adj_list[vertex]:
                  indegree[neighbor] -= 1
  
                  # Add neighbor to Q if in-degree becomes 0
                  if indegree[neighbor] == 0:
                      zero_indegree_queue.append(neighbor)
  
      return (
          topological_sorted_order
          if len(topological_sorted_order) == numCourses
          else []
      )
  
label_desc: Use image node_id 1 for calling the Solution obj's underlying member method code with example usage: obj.findOrder(numCourses, prerequisites) and returns: unknown