球球啦
#include <bits/stdc++.h>
using namespace std;
const int die[4][2]={{-1,-1},{-1,1},{1,-1},{1,1}};
const int ab[4]={2,1,1,2};
const int cd[4][2] ={{-1,-1},{-1,0},{0,-1},{0,0}};
int G[505][505],D[505][505];
struct P{int x,y,D;} u;
int read_ch(){
char c;
while((c=getchar())!='/'&&c!='\\');
return c=='/'?1:2;
}
int main() {
int n,m;cin>>n>>m;
memset(D,0x3f,sizeof(D));
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)G[i][j]=read_ch();
deque<P>dq;
dq.push_back((P){1,1,0});
D[1][1]=0;
while(!dq.empty()){
u=dq.front(),dq.pop_front();
int nx,ny;
for(int i=0;i<=3;++i){
nx=u.x+die[i][0];ny=u.y+die[i][1];
int d=0;
d=G[u.x+cd[i][0]][u.y+cd[i][1]]!=ab[i];
if(nx&ny&&nx<n+2&&ny<m+2&&D[nx][ny]>D[u.x][u.y]+d){
D[nx][ny]=D[u.x][u.y]+d;
if(d==0) dq.push_front((P){nx,ny,D[nx][ny]});
else dq.push_back((P){nx,ny,D[nx][ny]});
if(nx==n+1&&ny==m+1)break;
}
}
}
if(D[n+1][m+1]!=0x3f3f3f3f) cout<<D[n+1][m+1];
else cout<<"NO SOLUTION";
return 0;
}