void bfs(Node& root, std::function<void(Node*)> f) {
std::deque<Node*> node_queue;
node_queue.push_back(&root);
while (!node_queue.empty()) {
Node* const node = node_queue.front();
node_queue.pop_front();
f(node);
for (Node* const child : node->children) {
node_queue.push_back(child);
}
}
}