'''
grid: 0 for cells, 1 for walls, 2 for bears
what is the safest spot from bear?
'''
from collections import deque
DIR = [(1, 0), (-1, 0), (0, 1), (0, -1)]
def SafestFromBears(grid):
if not grid or len(grid)==0 or len(grid[0])==0:
return []
q = deque()
visited = set()
for i in range(grid):
for j in range(grid[0]):
if grid[i][j] == 2:
q.append((i, j))
visited.add((i, j))
distance = 0
ans = []
while q:
l = len(q)
ans = []
for _ in range(l):
i, j = q.popleft()
ans.append((i, j))
for dx, dy in DIR:
ni = i+dx
nj = j+dy
if is_valid(ni, nj, grid, visited):
q.append((ni, nj))
visited.add((ni, nj))
distance += 1
return ans
def is_valid(i, j, grid, visited) -> bool:
m = len(grid)
n = len(grid[0])
if i < 0 or i >= m or j < 0 or j >= n:
return False
if grid[i][j] != 0:
return False
return (i, j) not in visited
```