class Solution: def countPaths(self, grid: List[List[int]]) -> int: rows, cols = len(grid), len(grid[0]) dp = {} def dfs(r, c, previous_val): if r < 0 or r == rows or \ c < 0 or c == cols or \ grid[r][c] <= previous_val: return 0 if (r, c) in dp: return dp[(r, c)] res = 1 res += dfs(r + 1, c, grid[r][c]) res += dfs(r - 1, c, grid[r][c]) res += dfs(r, c + 1, grid[r][c]) res += dfs(r, c - 1, grid[r][c]) dp[(r, c)] = res return res for r in range(rows): for c in range(cols): dfs(r, c, -1) return sum(dp.values()) % (10**9 + 7)