https://www.acmicpc.net/problem/2178

import sys
from collections import deque
input = sys.stdin.readline
def bfs():
visit = [[False for _ in range(c)] for _ in range(r)]
q = deque()
dx = [1, -1, 0, 0]
dy = [0, 0, 1, -1]
q.append((0, 0))
while q:
x, y =q.popleft()
for i in range(4):
nx = x+dx[i]
ny = y+dy[i]
if 0 <= nx < r and 0 <= ny < c and not visit[nx][ny] and grid[nx][ny]==int(1e9):
visit[nx][ny]=True
grid[nx][ny] = min(grid[x][y]+1, grid[nx][ny])
q.append((nx, ny))
#print(grid)
if __name__ == "__main__":
r, c = map(int, input().split())
grid = []
for _ in range(r):
grid.append(list(map(int, input().rstrip())))
for i in range(r):
for j in range(c):
if i==0 and j==0: grid[0][0] = 1
elif grid[i][j]:
grid[i][j] = int(1e9)
bfs()
print(grid[-1][-1])