#include <bits/stdc++.h>
using namespace std;
int n, ans, board[105][105];
bool visited[105][105];
int di[] = {1, -1, 0, 0};
int dj[] = {0, 0, 1, -1};
void bfs(int i, int j) {
queue<pair<int, int>> q;
visited[i][j] = true;
q.push({i, j});
while (!q.empty()) {
i = q.front().first;
j = q.front().second;
q.pop();
for (int k = 0; k < 4; ++k) {
int ni = i + di[k];
int nj = j + dj[k];
if (ni >= 0 && ni < n && nj >= 0 && nj < n) {
if (!visited[ni][nj]) {
visited[ni][nj] = true;
q.push({ni, nj});
}
}
}
}
}
void solve() {
cin >> n;
set<int> heights;
heights.insert(0);
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
cin >> board[i][j];
heights.insert(board[i][j]);
}
}
for (const auto &height : heights) {
memset(visited, false, sizeof(visited));
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
if (board[i][j] <= height) {
visited[i][j] = true;
}
}
}
int cnt = 0;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
if (!visited[i][j]) {
cnt++;
bfs(i, j);
}
}
}
ans = max(ans, cnt);
}
cout << ans << '\n';
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
solve();
return 0;
}