function nPaths(r, c, dem, trod) {
const z = dem[r][c];
const [nr, nc] = [dem.length, dem[0].length];
if (trod?.has(r * nc + c)) {
return 0;
}
trod?.add(r * nc + c);
if (dem[r][c] === 9) {
return 1;
}
return (
(r > 0 && dem[r - 1][c] - z === 1 && nPaths(r - 1, c, dem, trod)) +
(c > 0 && dem[r][c - 1] - z === 1 && nPaths(r, c - 1, dem, trod)) +
(r < nr - 1 && dem[r + 1][c] - z === 1 && nPaths(r + 1, c, dem, trod)) +
(c < nc - 1 && dem[r][c + 1] - z === 1 && nPaths(r, c + 1, dem, trod))
);
}