군대 탈출하기

n×m 격자에서 (0,0)에서 (n-1,m-1)까지 이동하되, 한 방향으로 한 칸을 건너뛰는 점프를 최대 한 번 쓸 수 있을 때 필요한 최소 레벨을 구한다.

보통5이분 탐색BFS그래프배열면접 대비아직 제출이 없습니다시간 제한1초메모리 제한256 MB

문제

기윤이는 군대 탈출 게임을 좋아한다. 이 게임을 끝내려면 병영을 가로질러 밖으로 나가야 한다. 병영은 군기를 위해 언제나 세로 nn, 가로 mm인 직사각형이다.

기윤이는 왼쪽 위 블록 (0,0)(0, 0)에서 출발해 상하좌우 네 방향으로만 움직여 오른쪽 아래 블록 (n1,m1)(n-1, m-1)에 도착해야 한다. 움직이는 동안 병영 밖으로 나갈 수 없고, 블록 (0,0)(0, 0)과 블록 (n1,m1)(n-1, m-1)은 반드시 밟는다.

블록마다 레벨 제한이 있다. 블록에 적힌 수가 33이면 레벨이 33 이상이어야 그 블록을 밟을 수 있다.

기윤이는 공군의 특수장비를 게임당 한 번 쓸 수 있다. 특수장비를 쓰면 지금 서 있는 블록에서 한 방향으로 블록 하나를 건너뛰어 그 방향으로 두 칸 떨어진 블록에 내려선다. 건너뛴 블록은 밟지 않으므로 그 블록의 레벨 제한은 따지지 않는다. 조건은 두 가지다.

  1. 건너뛰는 도중에 방향을 바꿀 수 없다.
  2. 내려서는 블록이 병영 안에 있어야 한다.

기윤이가 병영을 탈출하려면 레벨이 최소 얼마여야 하는지 구하자.

입력

첫째 줄에 병영의 세로 길이 nn과 가로 길이 mm이 주어진다. (1n,m1001 \le n, m \le 100)

다음 nn개 줄에 병영의 레벨 제한이 위쪽 줄부터 차례대로 한 줄에 mm개씩 주어진다. 각 레벨 제한 kk0k1090 \le k \le 10^9를 만족한다.

출력

기윤이가 병영을 탈출하기 위해 달성해야 하는 최소 레벨을 출력한다.