code: func predecessors(e *edgeInfo, n *node) map[*node]bool {
  	seen := map[*node]bool{n: true}
  	queue := []*node{n}
  	for len(queue) > 0 {
  		n := queue[0]
  		queue = queue[1:]
  		for _, ie := range n.in {
  			if e == ie || seen[ie.src] {
  				continue
  			}
  			seen[ie.src] = true
  			queue = append(queue, ie.src)
  		}
  	}
  	return seen
  }
docs: // predecessors collects all the predecessors to node n, excluding edge e.