int helper(int[][] matrix, int i, int j, int[][] mem) {
        if (mem[i][j] > 0) return mem[i][j];
        for(int k = 0; k < 4; k++) {
            int ni = i + dx[k];
            int nj = j + dy[k];
            if (ni >= 0 && ni < matrix.length && nj >= 0 && nj < matrix[0].length && matrix[ni][nj] > matrix[i][j])
                mem[i][j] = Math.max(mem[i][j], helper(matrix, ni , nj, mem));
        }
        return ++mem[i][j];
    }