package practice;
import java.util.*;
// BFS, baseCode
// ìì ìì¹ìì ê° ìì¹ë§ë¤ ê°ëë° íìí ì´ë íì(1ë¡ ë ê³³ë§ ì´ëí ì ìì)
public class Main6 {
static int grid[][];
static int dist[][];
static boolean visited[][];
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
grid = new int[n][m];
// ê¸°ì¤ ì ì¼ë¡ ë¶í° 거리 ì°¨ì´(ìê°ì´ ë ìë ìë¤)
dist = new int[n][m];
visited = new boolean[n][m];
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
grid[i][j] = sc.nextInt();
}
}
Queue qx = new LinkedList<>();
Queue qy = new LinkedList<>();
int startx, starty;
// ë°©í¥
int dx[] = { 1, -1, 0, 0 };
int dy[] = { 0, 0, 1, -1 };
startx = starty = 1;
qx.add(startx);
qy.add(starty);
dist[startx][starty] = 0;
// ììì trueë¡ ììíë ê²½ì° ìê³ ê·¸ë ì§ ìì ê²½ì° ìë¤
// 11403 ìì ììì trueíì§ ìëë¤
visited[startx][starty] = true;
while (!qx.isEmpty()) {
int nowx = qx.poll();
int nowy = qy.poll();
for (int i = 0; i < 4; i++) {
int nextx = nowx + dx[i];
int nexty = nowy + dy[i];
// ì¡°ê±´ 3ê°
// ë²ì ë²ì´ë ê³³
if (nextx < 0 || nextx >= n || nexty < 0 || nexty >= m) {
continue;
}
// ê° ì ìë ê³³
if (grid[nextx][nexty] == 0) {
continue;
}
// ì´ë¯¸ 방문í ê³³
if (visited[nextx][nexty]) {
continue;
}
// ëê° 3ê°. distê° ë£ê¸°, visited ë°°ì´ true ë§ë¤ê¸°. qì ë¤ì ê° ì§ì´ ë£ê¸°
dist[nextx][nexty] = dist[nowx][nowy] + 1;
visited[nextx][nexty] = true;
qx.add(nextx);
qy.add(nexty);
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
System.out.print(dist[i][j] + " ");
}
System.out.println();
}
}
}