#include <iostream> using namespace std; int *solid; int n,m; //n=x m=y; struct Vector2 { Vector2(int X,int Y) { x=X; y=Y; } Vector2(){x=0;y=0;} int x; int y; }; int getTile(int *a,int x,int y) { return a[y*n+x]; } void setTile(int *a,int x,int y,int val) { a[y*n+x]=val; } int main() { cin>>n>>m; // l=new int[n*m]; solid=new int[m*n]; for(int y=0; y<m; y++) { string s; cin>>s; for(int x=0; x<n; x++) setTile(solid,x,y,s[x]); } bool done=false; Vector2 directions[]= {Vector2(0,1),Vector2(1,0)}; Vector2 queue[200]; queue[0]=Vector2(0,0); int p=0,u=1,lastChecked=1; setTile(solid,0,0,1); while(p!=u) { lastChecked=getTile(solid,queue[p].x,queue[p].y); for(int i=0; i<2; i++) { if(directions[i].x+queue[p].x>=0 && directions[i].x+queue[p].x<n && directions[i].y+queue[p].y>=0 && directions[i].y+queue[p].y<m && getTile(solid,directions[i].x+queue[p].x,directions[i].y+queue[p].y)==46) { queue[u++]=Vector2(directions[i].x+queue[p].x,directions[i].y+queue[p].y); setTile(solid,directions[i].x+queue[p].x,directions[i].y+queue[p].y,getTile(solid,queue[p].x,queue[p].y)+1); } } p++; } for(int y=0;y<m;y++) { for(int x=0;x<n;x++) cout<<getTile(solid,x,y)<<" "; cout<<endl; } cout<<lastChecked; return 0; }