RT
#include<bits/stdc++.h>
using namespace std;
int n, m;
int vis[1005][1005], ma[1005][1005], vi[1005][1005];
int ttx[4]={1, -1, 0, 0};
int tty[4]={0, 0, -1, 1};
inline bool check(int x, int y){
return x >= 1 && x <= n && y >= 1 && y <= m && !vis[x][y] && !vi[x][y];
}
queue <int> xx, yy;
inline void bfs(int x, int y){
xx.push(x);
yy.push(y);
ma[x][y] = 0;
while(!xx.empty()){
int ux=xx.front(), uy=yy.front();
xx.pop();
yy.pop();
for(int i=0; i<4; i++){
int tx = ux+ttx[i], ty = uy+tty[i];
if(check(tx, ty)){
if(ma[tx][ty] == 0){
ma[tx][ty] = ma[ux][uy]+1;
} else{
if(ma[tx][ty] <= ma[ux][uy]+1) continue ;
ma[tx][ty] = min(ma[tx][ty], ma[ux][uy]+1);
}
xx.push(tx);
yy.push(ty);
vi[tx][ty]=1;
}
}
}
}
int main(){
ios::sync_with_stdio(0);
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n >> m;
for(int i=1; i<=n; i++){
for(int j=1; j<=m; j++){
char c;
cin >> c;
vis[i][j] = c-'0';
}
}
for(int i=1; i<=n; i++){
for(int j=1; j<=m; j++){
if(vis[i][j] == 1){
memset(vi, 0, sizeof vi);
bfs(i, j);
}
}
}
for(int i=1;i<=n; i++){
for(int j=1; j<=m; j++){
cout << ma[i][j] << " ";
}
cout << endl;
}
return 0;
}