Add a function `strongly_connected_components(self) -> Dict[Node, int]:` to Graph which divides the graph into disjoint subsets where each node in a subset can be reached from any other node. The union of all subsets should be equivalent to the original graph. Do not change any of the other methods in the classes. 
The output of the function should be a dictionary mapping each `Node` in the Graph to an `int` where the `int` represents the subset the `Node` should be in. If two nodes have the same `int` value then they are in the same subset, otherwise, they are not.