# time O(R*C)  space O(1) ignoring depth of stack 
class Solution:
    def maxAreaOfIsland(self, grid: List[List[int]]) -> int:
        max_a = 0
        rows = len(grid)
        cols = len(grid[0])
        for i in range(rows):
            for j in range(cols):
                if grid[i][j] == 1:
                    
                    cnt = self.dfs(i,j,grid)
                    max_a = max(cnt,max_a)
        return max_a



    def dfs(self,i,j,grid):
        if i < 0 or i >= len(grid) or j < 0 or j >= len(grid[0]) or grid[i][j] != 1: 
            return 0
        
        grid[i][j] = 0
        res = 1
        res += self.dfs(i+1,j,grid)
        res += self.dfs(i-1,j,grid)
        res += self.dfs(i,j+1,grid)
        res += self.dfs(i,j-1,grid)
        return res