#include <iostream> #include <string> #include <queue> using namespace std; struct point { int x,y; }; queue<point> c; point a,b; char A[101][101]; int B[101][101]; int maxx=0; int n,m; int ii; bool ok(int k,int x,int y) { if (x>=n || y>=m) return false; if (A[x][y]!='.') return false; if (k>maxx) maxx=k; return true; } void back(int k,int x,int y) { //cout<<x<<" "<<y<<'\n'; if (ok(k,x,y)) { back(k+1,x+1,y); back(k+1,x,y+1); } } void lee(point a) { point b; c.push(a); B[a.x][a.y]=1; while (!c.empty()) { a=c.front(); c.pop(); //cout<<a.x<<' '<<a.y<<'\n'; if (a.x+1<n && A[a.x+1][a.y]=='.' && B[a.x+1][a.y]==0 ) { b.x=a.x+1; b.y=a.y; c.push(b); B[b.x][b.y]=B[a.x][a.y]+1; if (B[b.x][b.y]>maxx) maxx=B[b.x][b.y]; } if (a.y+1<m && A[a.x][a.y+1]=='.' && B[a.x][a.y+1]==0) { b.x=a.x; b.y=a.y+1; c.push(b); B[b.x][b.y]=B[a.x][a.y]+1; if (B[b.x][b.y]>maxx) maxx=B[b.x][b.y]; } } } int main() { a.x=0; a.y=0; cin>>n>>m; for (int i=0;i<n;++i) for (int j=0;j<m;++j) cin>>A[i][j]; if (A[0][0]=='&') cout<<0; else { lee(a); cout<<maxx; } return 0; }