ํ์ด
์ด์ ์ ํ์๋ โํ ๋งํ โ ์ ๊ฐ์ ๋ฌธ์ ์ด์ง๋ง 3์ฐจ์ ๊ฐ๋ ์ ์ ํ ๋ฌธ์ ์ด๋ค.
๊ฐ๋ ์ ๊ฐ๊ธฐ์ ๋์ด์ ๋ํ ๋ณ์๋ค๋ง ์์ ํด์ฃผ๋ฉด ์ด๋ ต์ง์๊ฒ ํ ์ ์๋ค.
์ฃผ์ํ ์ ์ ์ขํ๋ฅผ ์ง์ ํ ๋ ๋์ด์ ๋ํ ์ธ๋ฑ์ฑ์ด ๋จผ์ ์์ผํ๋ค๋ ์ ๊ณผ dx, dy, dz ๋ฅผ ์์ ํด์ค์ผํ๋ค๋ ์ ์ด ์๋ค.
์์ค์ฝ๋
# ํ ๋งํ
from collections import deque
import sys
input = sys.stdin.readline
def bfs():
while q:
x, y, z = q.popleft()
for k in range(6):
nx = x + dx[k]
ny = y + dy[k]
nz = z + dz[k]
if 0 <= nx < n and 0 <= ny < m and 0 <= nz < h and graph[nz][nx][ny] == 0: # ๋ฒ์ ๋ด ์ด๋ฉด์ ์ต์ง ์์์ ๊ฒฝ์ฐ
q.append([nx, ny, nz])
graph[nz][nx][ny] = graph[z][x][y] + 1 # ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ ๊ฒธ ์ผ์ ๊ณ์ฐ
return
dx = [1, -1, 0, 0, 0, 0]
dy = [0, 0, -1, 1, 0, 0]
dz = [0, 0, 0, 0, -1, 1]
m, n, h = map(int, input().split())
graph = [[list(map(int, input().split())) for _ in range(n)] for k in range(h)]
q = deque()
for i in range(n):
for j in range(m):
for k in range(h):
if graph[k][i][j] == 1:
q.append([i, j, k]) # ์ด๋ฏธ ์ต์ด์๋ ํ ๋งํ ๋ค์ ํ์ ์ฝ์
bfs() # BFS ์คํ
allRipe = True
ans = 0
for i in range(n):
for j in range(m):
for k in range(h):
if graph[k][i][j] == 0:
allRipe = False
break
ans = max(ans, graph[k][i][j])
if allRipe == False:
print(-1)
elif ans == 1:
print(0)
else:
print(ans - 1)