#include #define REP(i,n,N) for(int i=(n);i<(int)N;i++) #define p(s) cout<<(s)<>w>>h; string field[21]; REP(i,0,h) cin>>field[i]; stack> st; vector> vt[2]; int v=0; REP(i,1,h-1){ REP(j,1,w-1){ if(field[i][j]=='.'&&!visit[i][j]){ st.push({i,j}); vt[v].push_back({i,j}); visit[i][j]=true; while(!st.empty()){ pair now=st.top();st.pop(); REP(i,0,4){ int ny=now.F+dy[i],nx=now.S+dx[i]; if(field[ny][nx]=='#') continue; if(visit[ny][nx]) continue; visit[ny][nx]=true; vt[v].push_back({ny,nx}); st.push({ny,nx}); } } v++; } } if(v==2) break; } int ans=inf; for(auto a : vt[0]){ for(auto b :vt[1]){ int x= abs(b.F-a.F),y=abs(b.S-a.S); ans=min(ans,x+y-1); } } p(ans); return 0; }