def bfs(graph, start):
    """
    Breadth first search
    Args:
        graph (dict): graph
        start (node): some key of the graph

    Time: O(|V| + |E|)
    """
    seen = set()
    path = []
    queue = [start]
    while queue:
        current = queue.pop(0)
        if current not in seen:
            seen.add(current)
            path.append(current)
            queue.extend(graph[current])
    return path