/*
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("Hello world!\n");
return 0;
}
*/
/*
//오목
#include <stdio.h>
int a[20][20]={};
int visited[20][20]={};
int black=0, white=0;
void dfs_black(int x, int y)
{
visited[x][y]=0;
if(x-1>=0 && y-1>=0 && visited[x-1][y-1]==0 && a[]){
}
}
void dfs_white(int x, int y)
{
visited[x][y]=0;
}
int main()
{
int i, j;
for(i=1; i<=19; i++){
for(j=1; j<=19; j++){
scanf("%d", &a[i][j]);
}
}
for(i=1; i<=19; i++){
for(j=1; j<=19; j++){
if(visited!=0){
if(a[i][j]==1){
dfs_black(i, j);
}
else if(a[i][j]==2){
dfs_white(i, j);
}
}
}
}
return 0;
}
*/
//안전영역
#include <stdio.h>
int a[102][102]={};
int b[102][102]={};
int s;
int r=0, max_dfs=0, v=0;
void dfs(int x, int y)
{
if(x+1<=s && a[x+1][y]==v){
dfs(x+1, y);
r++;
}
if(x-1>=1 && a[x-1][y]==v){
dfs(x-1, y);
r++;
}
if (y+1<=s && a[x][y+1]==v){
dfs(x, y+1);
r++;
}
if(y-1>=1 && a[x][y-1]==v){
dfs(x, y-1);
r++;
}
}
int main()
{
int max=0, min=1000;
int i, j;
scanf("%d", &s);
for(i=1; i<=s; i++){
for(j=1; j<=s; j++){
scanf("%d", &a[i][j]);
b[i][j]=a[i][j];
if(max<a[i][j]){
max=a[i][j];
}
else if(min>a[i][j]){
min=a[i][j];
}
}
}
for(i=1; i<=s; i++){
for(j=1; j<=s; j++){
if(a[i][j]>min){
a[i][j]=b[i][j];
v=min;
dfs(i, j);
if(min<max){
min++;
}
if(max_dfs<r){
max_dfs=r;
}
}
}
}
printf("%d", max_dfs);
return 0;
}



