#include #include #include #include #include #include #include #include #include #include #include #include typedef long long ll; using namespace std; #define mod 1000000007 #define INF 1000000000 #define LLINF 2000000000000000000LL #define PI 3.1415926536 #define SIZE 1000 ll dp[100][100][12][12]; bool visit[100][100][12][12]; int mo[] = {0,1,0,-1,0}; int h,w,m[100][100]; bool isKadomatsuSequence(int a,int b,int c){ if(a==-1) return true; if(a==b || b==c || c==a) return false; if(b==min(a,min(b,c))) return true; if(b==max(a,max(b,c))) return true; return false; } ll dfs(int y,int x,int a,int b){ ll ret = LLINF; if(y<0 || h<=y || x<0 || w<=x) return LLINF; if(w-1==x && h-1==y && isKadomatsuSequence(a,b,m[y][x])) return 0; if(visit[y][x][a+1][b+1]) return LLINF; if(!isKadomatsuSequence(a,b,m[y][x])) return LLINF; if(dp[y][x][a+1][b+1]>0) return dp[y][x][a+1][b+1]; visit[y][x][a+1][b+1] = true; for(int i=0;i<4;i++){ ret = min(ret,dfs(y+mo[i],x+mo[i+1],b,m[y][x])+1); } visit[y][x][a+1][b+1] = false; return dp[y][x][a+1][b+1] = ret; } int main(){ scanf("%d%d",&w,&h); for(int i=0;i