Adrian și-a luat un elicopter. Evident, un elicopter de jucărie. Adrian se joacă cu elicopterul său pe o suprafață reprezentată de o matrice de n×m
, unde se află turnuri. Fiecare turn se află în celula reprezentată de indicii i
și j
, având înălțimea h[i][j]
. În jocul său, Adrian dorește să piloteze elicopterul său. Inițial, elicopterul este ridicat în aer la o anumită înălțime, și poziționat într-o celulă aflată pe prima coloană. Pe parcursul jocului, elicopterul este menținut la înălțimea inițială. La fiecare pas, elicopterul se poate muta în una din celulele învecinate pe linie sau pe coloană, în stânga, dreapta, sus sau jos, doar dacă înălțimea turnului nu este mai mare decât înălțimea la care se află elicopterul. Jocul se termină când elicopterul ajunge într-o celulă aflată pe ultima coloană.
Cerința
Să se determine cea mai mică valoare a înălțimii la care trebuie ridicat elicopterul, astfel încât acesta să poată ajunge pe o celulă aflată pe ultima coloană.
Date de intrare
Fișierul de intrare elicopter.in
conține pe prima linie numerele n m
. Următoarele n
linii vor conține câte m
numere, reprezentând înălțimile turnurilor.
Date de ieșire
Fișierul de ieșire elicopter.out
va conține un număr, reprezentând valoarea înălțimii inițiale.
Restricții și precizări
1 ≤ n, m ≤ 1 000
1 ≤ a[i] ≤ 1 000 000
- Pentru teste în valorea de 11 puncte,
n = 1
; - Pentru teste în valoare de 12 puncte,
m = 1
.
Exemplu:
elicopter.in
4 4 1 5 2 4 9 2 4 5 2 4 5 2 8 3 7 2
elicopter.out
4
Explicație
Celulele vizitate sunt (3, 1)->(3, 2)->(2, 2)->(2, 3)->(1, 3)->(1, 4)
Există și alte modalități de a ajunge cu elicopterul pe ultima coloană, dar niciuna nu este realizabilă pornind de la o înălțime mai mică decât 4
.