struct Graph {
mut:
	root   Node
	forest []Node
}

struct Node {
	name string
mut:
	kids map[string][]Node
}

fn (g Graph) pp() {
	mut visited := map[string]bool{}
	mut horizon := [g.root]

	for horizon.len > 0 {
		current := horizon.first()
		horizon.delete(0)
		println('${current.name} -> ${current.kids.keys()}')
		visited[current.name] = true
		for k, v in current.kids {
			_ = visited[k] or {
				v.map(horizon << it)
				true
			}
		}
		println('HORIZON = ${horizon}')
	}
}
