# main idea:  DFS 
1. create set to record all rooms can be open 
2. dfs recursively traverse non-visited rooms within current room's keys
3. at lowest level, check if len visited rooms == len all rooms 
class Solution:
    def canVisitAllRooms(self, rooms: List[List[int]]) -> bool:
        # time O(N+K) space O(N)
        seen = set()
        k = 0
        seen.add(0)
        def dfs(k,seen,rooms):
            for kk in rooms[k]:
                if kk not in seen:
                    seen.add(kk)
                    dfs(kk,seen,rooms)
            if len(rooms) == len(seen):
                return True
            return False
        return dfs(k,seen,rooms)