### containVirus 
from typing import *
def f_gold(isInfected: List[List[int]]) -> int:
    def dfs(i, j):
        vis[i][j] = True
        areas[-1].add((i, j))
        for a, b in [[0, -1], [0, 1], [1, 0], [-1, 0]]:
            x, y = i + a, j + b
            if 0 <= x < m and 0 <= y < n:
                if isInfected[x][y] == 1 and not vis[x][y]:
                    dfs(x, y)
                elif isInfected[x][y] == 0:
                    c[-1] += 1
                    boundaries[-1].add((x, y))
    m, n = len(isInfected), len(isInfected[0])
    ans = 0
    while 1:
        vis = [[False] * n for _ in range(m)]
        areas = []
        c = []
        boundaries = []
        for i, row in enumerate(isInfected):
            for j, v in enumerate(row):
                if v == 1 and not vis[i][j]:
                    areas.append(set())
                    boundaries.append(set())
                    c.append(0)
                    dfs(i, j)
        if not areas:
            break
        idx = boundaries.index(max(boundaries, key=len))
        ans += c[idx]
        for k, area in enumerate(areas):
            if k == idx:
                for i, j in area:
                    isInfected[i][j] = -1
            else:
                for i, j in area:
                    for a, b in [[0, -1], [0, 1], [1, 0], [-1, 0]]:
                        x, y = i + a, j + b
                        if 0 <= x < m and 0 <= y < n and isInfected[x][y] == 0:
                            isInfected[x][y] = 1
    return ans