import java.util.*;

// 带有记忆的深度优先!
public class Solution {
    private int[][] memory;
    public int solve (int[][] matrix) {
        memory = new int[matrix.length][matrix[0].length];
        int ans = 0;
        for(int i = 0; i < matrix.length; i++){
            for(int j = 0; j < matrix[0].length; j++){
                ans = Math.max(ans,getPath(matrix,i,j,-1));
            }
        }
        return ans;
    }
    
    private int getPath(int[][] matrix,int row,int col,int pre_val){
        if(row < 0 || row >= matrix.length || col < 0 || col >= matrix[0].length) return 0;
        if(matrix[row][col] <= pre_val) return 0;
        if(memory[row][col] != 0) return memory[row][col];
        int path = 0;
        int cur_val = matrix[row][col];
        path = Math.max(getPath(matrix,row+1,col,cur_val),path);
        path = Math.max(getPath(matrix,row-1,col,cur_val),path);
        path = Math.max(getPath(matrix,row,col+1,cur_val),path);
        path = Math.max(getPath(matrix,row,col-1,cur_val),path);
        memory[row][col] = 1 + path;
        return memory[row][col];
    }
    
}