Simple DFS || Very Easy to understand !!! || With Explanation !!!
Remove the given infected node, and do DFS with its neighbor node.\n### If the returned value does not meet the length of this path. We save zero, else we save 
### Remove the given infected node, and do DFS with its neighbor node.\n### If the returned value does not meet the length of this path. We save zero, else we save the whole path.\n### ** Sort the initial arrary becasue we have to return the smallest index if there are multiple answers.\n# Code\n```python3 []\nclass Solution:\n    def minMalwareSpread(self, graph: List[List[int]], initial: List[int]) -> int:\n        adj = defaultdict(set)\n        n = len(graph)\n        for i in range(n):\n            for j in range(n):\n                if i == j:\n                    continue\n                if graph[i][j]:\n                    adj[i].add(j)\n                    adj[j].add(i)\n        mal = set(initial)\n        best = -1\n        def dfs(src):\n            if src in visit:\n                return 0 \n            visit.add(src)\n            path.add(src)\n            res = 1\n            if src in initial:\n                res = -1\n            for nei in adj[src]:\n                res += dfs(nei)\n            return res\n        initial.sort()\n        index = initial[0]\n        for i in initial:\n            visit = set([i])\n            save = 0\n            visit.add(i)\n            for nei in adj[i]:\n                path = set()\n                sub = dfs(nei)\n                save += sub if sub == len(path) else 0\n            if save > best:\n                best = save\n                index = i\n        return index\n       \n\n        \n```
['Python3']