from collections import deque
import copy
def swiping(arr, dir):
global n, res
dxy = [[0, 1], [1, 0], [0, -1], [-1, 0]]
for i in range(n):
starts = [[i, 0], [0, i], [i, n-1], [n-1, i]]
ind = starts[dir].copy()
target = ind.copy()
buff = deque()
while True:
if 0 <= ind[0] < n and 0 <= ind[1] < n:
if arr[ind[0]][ind[1]] != 0:
val1 = arr[ind[0]][ind[1]]
if not buff:
buff.append([ind[0], ind[1], val1])
else:
x, y, val2 = buff.popleft()
arr[x][y] = 0
if val2 == val1:
arr[ind[0]][ind[1]] = 0
arr[target[0]][target[1]] = val2*2
if res < val2*2:
res = val2*2
target = [target[0]+dxy[dir]
[0], target[1]+dxy[dir][1]]
else:
arr[target[0]][target[1]] = val2
if res < val2:
res = val2
target = [target[0]+dxy[dir]
[0], target[1]+dxy[dir][1]]
buff.append([ind[0], ind[1], val1])
ind = [ind[0]+dxy[dir][0], ind[1]+dxy[dir][1]]
if ind[0] < 0 or ind[0] >= n or ind[1] < 0 or ind[1] >= n:
if buff:
x, y, val2 = buff.popleft()
arr[x][y] = 0
arr[target[0]][target[1]] = val2
break
def backtracking(k, li):
if k == 5:
return
for dire in range(4):
tmpArray = copy.deepcopy(li)
swiping(tmpArray, dire)
backtracking(k+1, tmpArray)
n = int(input())
src = [list(map(int, input().split())) for _ in range(n)]
res = 0
for x in range(n):
for y in range(n):
if res < src[x][y]:
res = src[x][y]
backtracking(0, src)
print(res)