var dirs = [][2]int{{1, 0}, {-1, 0}, {0, 1}, {0, -1}}
func countPaths(grid [][]int) int {
mod := 1000000007
n, m:= len(grid), len(grid[0])
ans := 0
f := make([][]int, n)
for i := range f {
f[i] = make([]int, m)
for j := range f[i] {
f[i][j] = -1
}
}
var dfs func(int, int) int
dfs = func(i, j int) int {
if f[i][j] != -1 {
return f[i][j]
}
res := 1
for _, dir := range dirs {
x, y := i + dir[0], j + dir[1];
if 0 <= x && x < n && 0 <= y && y < m && grid[x][y] > grid[i][j] {
res = (res + dfs(x, y)) % mod
}
}
f[i][j] = res
return res
}
for i := 0; i < n; i ++ {
for j := 0; j < m; j ++ {
ans = (ans + dfs(i, j)) % mod
}
}
return ans
}