#include<bits/stdc++.h>
using namespace std;
int n,m;
int ans=-1,dx[8]={1,0,-1,0,1,1,-1,-1},dy[8]={0,1,0,-1,1,-1,1,-1};
int dis[501][501][2];
bool vis[501][501][2],mapp[501][501];
struct node{
int x,y,dis;
bool dir;
};
queue<node> q;
void bfs(){
if(mapp[1][1]){
mapp[1][1]^=1;
q.push({1,1,1,mapp[1][1]});
vis[1][1][mapp[1][1]]=1;
dis[1][1][0]=1;
}else{
q.push({1,1,0,mapp[1][1]});
vis[1][1][mapp[1][1]]=1;
}
while(!q.empty()){
int x=q.front().x;
int y=q.front().y;
int diss=q.front().dis;
bool dir=q.front().dir;
q.pop();
if(x==n&&y==m){
ans=q.front().dis;
return;
}
for(int i=0;i<8;i++){
int tx=x+dx[i],ty=y+dy[i];
if(tx<=0||tx>n||ty<=0||ty>m){
continue;
}
if(!dx[i]||!dy[i]){
if(mapp[tx][ty]==dir&&(!vis[tx][ty][dir^1]||dis[tx][ty][dir^1]>diss+1)){
mapp[tx][ty]^=1;
vis[tx][ty][mapp[tx][ty]]=1;
q.push({tx,ty,diss+1,mapp[tx][ty]});
dis[tx][ty][mapp[tx][ty]]=diss+1;
}else if(mapp[tx][ty]!=dir&&(!vis[tx][ty][dir]||dis[tx][ty][dir]>diss)){
vis[tx][ty][mapp[tx][ty]]=1;
q.push({tx,ty,diss,mapp[tx][ty]});
dis[tx][ty][mapp[tx][ty]]=diss;
}
}else{
if(mapp[tx][ty]){
if(dx[i]==1&&dy[i]==-1||dx[i]==-1&&dy[i]==1){
if(mapp[tx][ty]!=dir&&(!vis[tx][ty][dir^1]||dis[tx][ty][dir^1]>diss+1)){
mapp[tx][ty]^=1;
vis[tx][ty][mapp[tx][ty]]=1;
q.push({tx,ty,diss+1,mapp[tx][ty]});
dis[tx][ty][mapp[tx][ty]]=diss+1;
}else if(mapp[tx][ty]==dir&&(!vis[tx][ty][dir]||dis[tx][ty][dir]>diss+1)){
vis[tx][ty][mapp[tx][ty]]=1;
q.push({tx,ty,diss,mapp[tx][ty]});
dis[tx][ty][mapp[tx][ty]]=diss;
}
}
}else{
if(dx[i]==-1&&dy[i]==-1||dx[i]==1&&dy[i]==1){
if(mapp[tx][ty]!=dir&&(!vis[tx][ty][dir^1]||dis[tx][ty][dir^1]>diss+1)){
mapp[tx][ty]^=1;
vis[tx][ty][mapp[tx][ty]]=1;
q.push({tx,ty,diss+1,mapp[tx][ty]});
dis[tx][ty][mapp[tx][ty]]=diss+1;
}else if(mapp[tx][ty]==dir&&(!vis[tx][ty][dir]||dis[tx][ty][dir]>diss+1)){
vis[tx][ty][mapp[tx][ty]]=1;
q.push({tx,ty,diss,mapp[tx][ty]});
dis[tx][ty][mapp[tx][ty]]=diss;
}
}
}
}
}
}
}
int main(){
cin >> n >> m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
char pig;
cin >> pig;
if(pig=='/'){
mapp[i][j]=1;
}else{
mapp[i][j]=0;
}
}
}
bfs();
if(ans>=0){
cout << ans << endl;
}else{
cout << "NO SOLUTION" << endl;
}
return 0;
}
会超时