#include <iostream> #include <fstream> #include <queue> using namespace std; int a[101][101]; char c[101][101]; int n,i,m; queue< pair<int, int> > q; pair<int, int> punct; int ok(int i,int j,int n,int m) { if(i>=0&&i<n&&j>=0&&j<m) return 1; return 0; } void citeste(int &n,int &m) { ifstream f("run.in"); int i,j; cin>>n>>m; for(i=0;i<n;i++) for(j=0;j<m;j++) cin>>c[i][j]; } void rezolva(int xi,int yi) { q.push(make_pair(xi,yi)); a[xi][yi]=1; while(!q.empty()) { punct = q.front(); int px = punct.first; int py = punct.second; if(ok(px+1,py,n,m) && c[px+1][py]=='.') { a[px+1][py] = a[px][py] + 1; q.push(make_pair(px+1,py)); } if(ok(px,py+1,n,m) && c[px][py+1]=='.') { a[px][py+1] = a[px][py] + 1; q.push(make_pair(px,py+1)); } q.pop(); } } int main() { citeste(n,m); rezolva(0,0); int maxi = 0; for(i=0;i<m;i++) if(a[0][i]>maxi) maxi=a[0][i]; for(i=0;i<m;i++) if(a[n-1][i]>maxi) maxi=a[n-1][i]; for(i=0;i<n;i++) if(a[i][0]>maxi) maxi=a[i][0]; for(i=0;i<n;i++) if(a[m-1][i]>maxi) maxi=a[m-1][i]; cout<<maxi; return 0; }