docs: def walk(start:list, graphs:iter) -> iter:
      """walk on given graphs, beginning on start.
      Yield all found nodes, including start.
  
      All graph are understood as a single one,
      with merged keys and values.
  
      """
      walked = set([start])
      stack = [start]
      while len(stack) > 0:
          *stack, curr = stack
          yield curr
          succs = it.chain.from_iterable(graph.get(curr, ()) for graph in graphs)
          for succ in succs:
              if succ not in walked:
                  walked.add(curr)
                  stack.append(succ)