code: func Unreachable(start Node, nodes []Node) []Node {
  	// DFS from the start ndoe
  	frontier := []Node{start}
  	seen := make(map[Node]struct{})
  	for len(frontier) > 0 {
  		// Pop the current node
  		n := len(frontier)
  		current := frontier[n-1]
  		frontier = frontier[:n-1]
  
  		// Check for potential cycle
  		if _, ok := seen[current]; ok {
  			continue
  		}
  		seen[current] = struct{}{}
  
  		// Add any new edges to visit, in reverse order
  		edges := current.Edges()
  		for i := len(edges) - 1; i >= 0; i-- {
  			frontier = append(frontier, edges[i].Tail())
  		}
  	}
  
  	// Check for any unseen nodes
  	var unseen []Node
  	for _, node := range nodes {
  		if _, ok := seen[node]; !ok {
  			unseen = append(unseen, node)
  		}
  	}
  	return unseen
  }
docs: // Unreachable starts at a given start node, performs
  // a DFS from there, and returns the set of unreachable nodes.