#include <iostream>
#include <cstring>
#define x first
#define y second
using namespace std;
typedef pair<int, int> PII;
const int N = 1010, M = N * N;
int n, m;
PII q[M];
char g[N][N]; //因为没有空格,所以用字符存
int dist[N][N];
int dx[] = {1, 0, -1, 0}, dy[] = {0, 1, 0, -1};
void bfs()
{
memset(dist, -1, sizeof dist);
int hh = 0, tt = -1;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
if (g[i][j] == '1')
{
q[++tt] = {i, j}; //将多个源点入队
dist[i][j] = 0;
}
while (hh <= tt)
{
auto t = q[hh++];
for (int i = 0; i < 4; i++)
{
int a = t.x + dx[i], b = t.y + dy[i];
if (a < 1 || a > n || b < 1 || b > m)
continue;
if (dist[a][b] != -1)
continue;
dist[a][b] = dist[t.x][t.y] + 1;
q[++tt] = {a, b};
}
}
}
int main()
{
cin >> n >> m;
for (int i = 1; i <= n; i++)
scanf("%s", g[i] + 1); //下标从1开始存储
bfs();
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= m; j++)
printf("%d ", dist[i][j]);
puts("");
}
return 0;
}