def topo_sort_recursive(n: GraphNode, visited: Dict[GraphNode, bool],
                        res: List[GraphNode]) -> List[GraphNode]:
    visited[n] = True
    for edge in n.edges:
        if not (visited[edge]):
            topo_sort_recursive(edge, visited, res)
    res.append(n)
    return res


# Driver code for an acyclic, connected graph
a = GraphNode(0)
b = GraphNode(1)
c = GraphNode(2)

a.edges.append(b)
a.edges.append(c)
b.edges.append(c)

a.print_edges()
nodes = [a, b, c]

dfs(a)
dfs(b)

bfs(a)

topological_sort(nodes)