from collections import deque
n, m = map(int, input().split())
g = [list(map(int, input().split())) for _ in range(n)]
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
viruslist = []
ans = -1
for i in range(n):
for j in range(n):
if g[i][j] == 2: #1
viruslist.append((i, j))
def bfs():
check = [[-1] * n for _ in range(n)]
q = deque()
for i in range(n):
for j in range(n):
if g[i][j] == 3:
q.append((i, j))
check[i][j] = 0
while q:
x, y = q.popleft()
for i in range(4):
nx, ny = x + dx[i], y + dy[i]
if nx <0 or ny < 0 or nx >= n or ny >= n:
continue
if check[nx][ny] == -1:
if g[nx][ny] != 1:
check[nx][ny] = check[x][y] + 1
q.append((nx, ny))
tmp = 0
for i in range(n):
for j in range(n):
if g[i][j] == 0: #3
if check[i][j] == -1:
return
if tmp < check[i][j]:
tmp = check[i][j]
global ans
if ans == -1 or ans > tmp:
ans = tmp
def go(index, cnt):
if index == len(viruslist):
if cnt == m:
bfs()
else:
x, y = viruslist[index]
g[x][y] = 2 #2
go(index+1, cnt)
g[x][y] = 3
go(index+1, cnt+1)
go(0, 0)
print(ans)
비활성 상태 -> #1 자리를 찾고 그 자리를 0으로 만들 필요 없음
#2