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