#include<iostream> #include<algorithm> #include<cstring> #include<queue> using namespace std ; const int N = 1010 ; int d[4][2] = {{1,0},{-1,0},{0,-1},{0,1}} ; struct node{ int x, y ; node(int xx ,int yy ){ x = xx , y = yy ; } }; char g[N][N] ; int n , m ; int dis[N][N] ; int v[N][N] ; queue<node> q ; void bfs(){ while(!q.empty()){ node now = q.front() ; q.pop() ; int x = now.x , y = now.y ; for(int i = 0 ; i < 4 ; i ++){ int tx = x + d[i][0] , ty = y + d[i][1] ; if(tx<0||tx>=n||ty<0||ty>=m||dis[tx][ty]!=-1) continue ; dis[tx][ty] = dis[x][y] + 1 ; q.push(node(tx,ty)) ; } } } int main(){ cin >> n >> m ; memset(dis,-1,sizeof(dis)) ; for(int i = 0 ; i < n ;i ++) cin >> g[i] ; for(int i = 0 ; i < n ; i++){ for(int j = 0 ; j < m ;j ++){ if(g[i][j] == '1') dis[i][j] = 0 , q.push(node(i,j)) ; } } bfs() ; for(int i = 0 ; i < n ; i ++){ for(int j = 0 ; j < m ; j ++){ cout << dis[i][j] << " " ; }cout << endl ; } }