class Solution:
def orderOfLargestPlusSign(self, N: int, mines: List[List[int]]) -> int:
# step1 first build grid
grid = [[N]*N for _ in range(N) ]
for m in mines:
grid[m[0]][m[1]] = 0
# step 2 l,r,u,d check
# grid[i][j]: fartherest distance, start from (i,j) l,r,u,d can go
for i in range(N):
l,r,u,d = 0,0,0,0
for j in range(N):
l = l + 1 if grid[i][j] else 0
if l < grid[i][j]:
grid[i][j] = l
r = r + 1 if grid[i][N-1-j] else 0
if r < grid[i][N-1-j]:
grid[i][N-1-j] = r
u = u + 1 if grid[j][i] else 0
if u < grid[j][i]:
grid[j][i] = u
d = d + 1 if grid[N-1-j][i] else 0
if d < grid[N-1-j][i]:
grid[N-1-j][i] = d
res = 0
# find max length in grid
for i in range(N):
for j in range(N):
if res < grid[i][j]:
res = grid[i][j]
return res