#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
const int N = 1e2 + 5;
int dx[4] = {0, 0, -1, 1};
int dy[4] = {-1, 1, 0, 0};
int n;
int h[N][N];
bool vis[N][N];
bool ok(int x, int y) {
return (1 <= x && x <= n && 1 <= y && y <= n && !vis[x][y]);
}
// Có tồn tại đường đi từ ô (sx, sy) đến ô (n, n) sao cho
// chỉ đi qua các ô có giá trị nằm trong đoạn [lo, hi]
bool bfs(int sx, int sy, int lo, int hi) {
if (!(lo <= h[sx][sy] && h[sx][sy] <= hi)) return false;
for (int x = 1; x <= n; x++) {
for (int y = 1; y <= n; y++) vis[x][y] = false;
}
queue<ii> q;
vis[sx][sy] = true;
q.push({sx, sy});
while (!q.empty()) {
ii u = q.front(); q.pop();
int x = u.first, y = u.second;
if (x == n && y == n) return true;
for (int i = 0; i < 4; i++) {
int nx = x + dx[i], ny = y + dy[i];
if (ok(nx, ny) && lo <= h[nx][ny] && h[nx][ny] <= hi) {
vis[nx][ny] = true;
q.push({nx, ny});
}
}
}
return false;
}
bool check(int mid) {
for (int lo = 0; lo <= 110; lo++) {
if (bfs(1, 1, lo, lo + mid)) return true;
}
return false;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n;
for (int x = 1; x <= n; x++) {
for (int y = 1; y <= n; y++) cin >> h[x][y];
}
int l = 0, r = 110, ans = -1;
while (l <= r) {
int mid = (l + r) >> 1; // chênh lệch giữa điểm cao nhất và thấp nhất
if (check(mid)) {
ans = mid;
r = mid - 1;
}
else {
l = mid + 1;
}
}
cout << ans << '\n';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKY29uc3QgaW50IE4gPSAxZTIgKyA1OyAKCmludCBkeFs0XSA9IHswLCAwLCAtMSwgMX07ICAKaW50IGR5WzRdID0gey0xLCAxLCAwLCAwfTsgIAoKaW50IG47ICAgCmludCBoW05dW05dOyAgIAoKYm9vbCB2aXNbTl1bTl07IAoKYm9vbCBvayhpbnQgeCwgaW50IHkpIHsKCXJldHVybiAoMSA8PSB4ICYmIHggPD0gbiAmJiAxIDw9IHkgJiYgeSA8PSBuICYmICF2aXNbeF1beV0pOyAKfQoKLy8gQ8OzIHThu5NuIHThuqFpIMSRxrDhu51uZyDEkWkgdOG7qyDDtCAoc3gsIHN5KSDEkeG6v24gw7QgKG4sIG4pIHNhbyBjaG8KLy8gY2jhu4kgxJFpIHF1YSBjw6FjIMO0IGPDsyBnacOhIHRy4buLIG7hurFtIHRyb25nIMSRb+G6oW4gW2xvLCBoaV0KYm9vbCBiZnMoaW50IHN4LCBpbnQgc3ksIGludCBsbywgaW50IGhpKSB7CglpZiAoIShsbyA8PSBoW3N4XVtzeV0gJiYgaFtzeF1bc3ldIDw9IGhpKSkgcmV0dXJuIGZhbHNlOyAgICAKCQoJZm9yIChpbnQgeCA9IDE7IHggPD0gbjsgeCsrKSB7CgkJZm9yIChpbnQgeSA9IDE7IHkgPD0gbjsgeSsrKSB2aXNbeF1beV0gPSBmYWxzZTsgIAoJfQoKCXF1ZXVlPGlpPiBxOyAgCgoJdmlzW3N4XVtzeV0gPSB0cnVlOyAgIAoJcS5wdXNoKHtzeCwgc3l9KTsgIAoKCXdoaWxlICghcS5lbXB0eSgpKSB7CgkJaWkgdSA9IHEuZnJvbnQoKTsgcS5wb3AoKTsgIAoJCWludCB4ID0gdS5maXJzdCwgeSA9IHUuc2Vjb25kOyAKCgkJaWYgKHggPT0gbiAmJiB5ID09IG4pIHJldHVybiB0cnVlOyAgCgoJCWZvciAoaW50IGkgPSAwOyBpIDwgNDsgaSsrKSB7CgkJCWludCBueCA9IHggKyBkeFtpXSwgbnkgPSB5ICsgZHlbaV07ICAKCgkJCWlmIChvayhueCwgbnkpICYmIGxvIDw9IGhbbnhdW255XSAmJiBoW254XVtueV0gPD0gaGkpIHsKCQkJCXZpc1tueF1bbnldID0gdHJ1ZTsgIAoJCQkJcS5wdXNoKHtueCwgbnl9KTsgICAgCgkJCX0KCQl9CQoJfQoKCXJldHVybiBmYWxzZTsgCn0KCmJvb2wgY2hlY2soaW50IG1pZCkgewoJZm9yIChpbnQgbG8gPSAwOyBsbyA8PSAxMTA7IGxvKyspIHsKCQlpZiAoYmZzKDEsIDEsIGxvLCBsbyArIG1pZCkpIHJldHVybiB0cnVlOyAKCX0KCXJldHVybiBmYWxzZTsgCn0KCmludCBtYWluKCkgewoJaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOyAKCWNpbi50aWUobnVsbHB0cik7IAkKCWNpbiA+PiBuOyAgCglmb3IgKGludCB4ID0gMTsgeCA8PSBuOyB4KyspIHsKCQlmb3IgKGludCB5ID0gMTsgeSA8PSBuOyB5KyspIGNpbiA+PiBoW3hdW3ldOyAKCX0KCglpbnQgbCA9IDAsIHIgPSAxMTAsIGFucyA9IC0xOyAKCXdoaWxlIChsIDw9IHIpIHsKCQlpbnQgbWlkID0gKGwgKyByKSA+PiAxOyAvLyBjaMOqbmggbOG7h2NoIGdp4buvYSDEkWnhu4NtIGNhbyBuaOG6pXQgdsOgIHRo4bqlcCBuaOG6pXQKCgkJaWYgKGNoZWNrKG1pZCkpIHsKCQkJYW5zID0gbWlkOyAgCgkJCXIgPSBtaWQgLSAxOyAKCQl9CgkJZWxzZSB7CgkJCWwgPSBtaWQgKyAxOyAKCQl9Cgl9CgoJY291dCA8PCBhbnMgPDwgJ1xuJzsgCn0=