#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define REP(i,n) for(long (i)=0;(i)<(n);(i)++) #define FOR(i,a,b) for(long (i)=(a);(i)<(b);(i)++) #define RREP(i,a) for(long (i)=(a)-1;(i)>=0;(i)--) #define FORR(i,a,b) for(long (i)=(a)-1;(i)>=(b);(i)--) #define PI acos(-1.0) #define DEBUG(C) cout< #define VII vector #define VL vector #define VLL vector #define VD vector #define VDD vector #define PII pair #define PDD pair #define PLL pair #define ALL(a) (a).begin(),(a).end() #define SORT(a) sort(ALL(a)) #define REVERSE(a) reverse(ALL(a)) #define MP make_pair #define FORE(a,b) for(auto &&a:b) using namespace std; typedef long long LL; typedef unsigned long long ULL; const int INF=1e9; const int MOD=INF+7; VII dis; vector S; int H,W; int vh[]={0,0,-1,-1,-1,1,1,1}; int vw[]={1,-1,1,0,-1,1,0,-1}; void search(int h,int w){ queue q; q.push(MP(h,w)); while(!q.empty()){ PII p=q.front(); q.pop(); int ph=p.first,pw=p.second; REP(i,8){ int dh=ph+vh[i],dw=pw+vw[i]; if(dh>=H+2 || dh<0) continue; if(dw>=W+2 || dw<0) continue; if(S[dh][dw]=='.') continue; if(S[ph][pw]=='.'){ dis[dh][dw]=1; q.push(MP(dh,dw)); }else if(dis[dh][dw]==0 || dis[dh][dw]>dis[ph][pw]+1){ dis[dh][dw]=dis[ph][pw]+1; q.push(MP(dh,dw)); } } } } void out(){ REP(i,dis.size()){ REP(j,dis[i].size()){ cout<>H>>W; S=vector(H+2); S.front()=str('.',H); S.back()=S.front(); FOR(i,1,H+1) cin>>S[i]; REP(i,S.size()){ S[i]='.'+S[i]+'.'; } dis=VII(H+2,VI(W+2,0)); REP(i,H+2)REP(j,W+2){ if(S[i][j]=='.'){ search(i,j); dis[i][j]=-1; } } int ans=1; REP(i,H+2)REP(j,W+2){ ans=max(ans,dis[i][j]); } //out(); cout<