



class Solution { // O(V + E), O(V)
public:
unordered_map<Node*, Node*> mp;
Node* cloneGraph(Node* onode) {
if (!onode) return nullptr;
if (mp.count(onode)) return mp[onode];
Node* ncopy = new Node(onode->val);
mp[onode] = ncopy;
for (Node* nei : onode->neighbors)
ncopy->neighbors.push_back(cloneGraph(nei));
return ncopy;
}
};