import copy
def move(d):
global N
if d == "right":
for row in range(N):
idx = N-1
for col in range(N-2, -1, -1):
if mat[row][col]:
tmp = mat[row][col]
mat[row][col] = 0
if mat[row][idx] == 0:
mat[row][idx] = tmp
elif mat[row][idx] == tmp:
mat[row][idx] *= 2
idx -= 1
else:
idx -= 1
mat[row][idx] = tmp
elif d == "left":
for row in range(N):
idx = 0
for col in range(1, N):
if mat[row][col]:
tmp = mat[row][col]
mat[row][col] = 0
if mat[row][idx] == 0:
mat[row][idx] = tmp
elif mat[row][idx] == tmp:
mat[row][idx] *= 2
idx += 1
else:
idx += 1
mat[row][idx] = tmp
elif d == "up":
for col in range(N):
idx = 0
for row in range(1, N):
if mat[row][col]:
tmp = mat[row][col]
mat[row][col] = 0
if mat[idx][col] == 0:
mat[idx][col] = tmp
elif mat[idx][col] == tmp:
mat[idx][col] *= 2
idx += 1
else:
idx += 1
mat[idx][col] = tmp
else:
for col in range(N):
idx = N-1
for row in range(N-2, -1, -1):
if mat[row][col]:
tmp = mat[row][col]
mat[row][col] = 0
if mat[idx][col] == 0:
mat[idx][col] = tmp
elif mat[idx][col] == tmp:
mat[idx][col] *= 2
idx -= 1
else:
idx -= 1
mat[idx][col] = tmp
def dfs(level):
global answ, mat, direction
if level == 5:
for m in mat:
answ.append(max(m))
else:
tmp_mat = copy.deepcopy(mat)
for d in direction:
move(d)
dfs(level+1)
mat = copy.deepcopy(tmp_mat)
N = int(input())
mat = [[0]*N for _ in range(N)]
mat = [list(map(int, input().split())) for _ in range(N)]
direction = ["right", "left", 'up', 'down']
answ = []
dfs(0)
print(max(set(answ)))