import sys
from collections import deque

input = sys.stdin.readline

n = int(input())
land = []
queue = deque()
land_num = 2  # 섬 번호는 2부터 시작

# 0: 바다
# 1: 방문하지 않음
# -1: 방문함(내륙)
# 2 이상: 섬의 가장자리(섬 번호)

for _ in range(n):
    land.append(list(map(int, input().split())))

# 섬 가장자리 확인
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]


def dfs(x, y):
    # 바다이거나 이미 탐색한 곳이면 리턴
    if land[y][x] != 1:
        return

    # 방문 표시
    land[y][x] = -1

    for d in range(4):
        nx = x + dx[d]
        ny = y + dy[d]

        if nx < 0 or nx >= n or ny < 0 or ny >= n:
            continue

        # 섬의 가장자리인 경우(옆에 바다가 있다!)
        if land[ny][nx] == 0:
            land[y][x] = land_num  # 섬 번호로 가장자리 구분하기
            queue.append([x, y])  # 나중에 탐색을 위해 큐에 집어넣기

        dfs(nx, ny)


for i in range(n):
    for j in range(n):
        if land[i][j] == 1:
            dfs(j, i)
            land_num += 1

for i in range(n):
    print(land[i])

print(queue)
# 가장자리에서 시작하는 BFS
result = 0

while queue:
    xy = queue.popleft()
    x = xy[0]
    y = xy[1]

    for d in range(4):
        nx = x + dx[d]
        ny = y + dy[d]

    if nx < 0 or nx >= n or ny < 0 or ny >= n:
        continue

print(result)
