from collections import deque
####BFS부분########
def bfs(n,height):
global num
num +=1
while q:
dx = [0,0,1,-1]
dy = [1,-1,0,0]
x,y = q.popleft()
count[x][y] = num
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0<=nx<n and 0<=ny<n:
if visited[nx][ny] ==0 and count[nx][ny] != -1:
q.append([nx,ny])
count[nx][ny] =num
visited[nx][ny] =1
result = []
q = deque()
n = int(input())
maps = [list(map(int,input().split(' '))) for _ in range(n)]
visited = [ [0]*n for _ in range(n) ]
high =max(map(max, maps))+1 #제일 높은 수면의 높이까지 증가하면서 최댓값을 구해야하기때문에
result = []
for length in range(high): #최대높이 까지 방문하는것
num = 0
count = [ [0]*n for _ in range(n) ]
visited = [ [0]*n for _ in range(n)]
##각 수면의 높이별로 BFS시도해야하는 count 이중리스트 생성 ####
for x in range(n):
for y in range(n):
if maps[x][y] <= length and visited[x][y] == 0:
count[x][y] = -1
####위에서 만든 배열에 BFS를 시도해야하는 부분 ##
for a in range(n):
for b in range(n):
if maps[a][b] > length and count[a][b] != -1 and visited[a][b] == 0:
q.append([a,b])
visited[a][b] =1
bfs(n,length)
##높이마다 안전영역개수를 리스트에 넣고 마지막에 최대높이만 구해주면된다#####
result.append(max(map(max,count)))
print(max(result))