code: def build_path(G, node, endpoints, path):
      
      # for each successor in the passed-in node
      for successor in G.successors(node):
          if successor not in path:
              # if this successor is already in the path, ignore it, otherwise add
              # it to the path
              path.append(successor)
              if successor not in endpoints:
                  # if this successor is not an endpoint, recursively call
                  # build_path until you find an endpoint
                  path = build_path(G, successor, endpoints, path)
              else:
                  # if this successor is an endpoint, we've completed the path,
                  # so return it
                  return path
  
      if (path[-1] not in endpoints) and (path[0] in G.successors(path[-1])):
          # if the end of the path is not actually an endpoint and the path's
          # first node is a successor of the path's final node, then this is
          # actually a self loop, so add path's first node to end of path to
          # close it
          path.append(path[0])
  
      return path
docs: Recursively build a path of nodes until you hit an endpoint node.
  
      Parameters
      ----------
      G : networkx multidigraph
      node : int
          the current node to start from
      endpoints : set
          the set of all nodes in the graph that are endpoints
      path : list
          the list of nodes in order in the path so far
  
      Returns
      -------
      paths_to_simplify : list