class Solution:
def shortestBridge(self, grid: List[List[int]]) -> int:
n = len(grid)
for i, row in enumerate(grid):
for j, v in enumerate(row):
if v != 1:
continue
island = []
grid[i][j] = -1
q = deque([(i, j)])
while q:
x, y = q.popleft()
island.append((x, y))
for nx, ny in (x + 1, y), (x - 1, y), (x, y + 1), (x, y - 1):
if 0 <= nx < n and 0 <= ny < n and grid[nx][ny] == 1:
grid[nx][ny] = -1
q.append((nx, ny))
step = 0
q = island
while True:
tmp = q
q = []
for x, y in tmp:
for nx, ny in (x + 1, y), (x - 1, y), (x, y + 1), (x, y - 1):
if 0 <= nx < n and 0 <= ny < n:
if grid[nx][ny] == 1:
return step
if grid[nx][ny] == 0:
grid[nx][ny] = -1
q.append((nx, ny))
step += 1