code: def node_to_edge(edges, directed=True):
      
      outgoing = defaultdict(set)
      incoming = defaultdict(set) if directed else outgoing
      nodes = set()
      for i, edge in enumerate(edges):
          a, b, = edge[:2]
          outgoing[a].add(i)
          incoming[b].add(i)
          nodes.add(a)
          nodes.add(b)
      nodes = sorted(nodes)
      if directed:
          return outgoing, incoming, nodes
      return outgoing, nodes
docs: From list of edges, record per node, incoming and outgoing edges