import math
N = int(input())
grid = []
for _ in range(8):
l = list( map(int, input().split()) )
grid.append(l)
pre_sum = [[val for val in grid[i]] for i in range(8)]
for i in range(8):
for j in range(1, 8):
pre_sum[i][j] += pre_sum[i][j-1]
for i in range(1, 8):
for j in range(8):
pre_sum[i][j] += pre_sum[i-1][j]
def get_sum(i1, j1, i2, j2):
val1 = 0 if i1-1 < 0 else pre_sum[i1-1][j2]
val2 = 0 if j1-1 < 0 else pre_sum[i2][j1-1]
val3 = 0 if i1-1 < 0 or j1-1 < 0 else pre_sum[i1-1][j1-1]
return pre_sum[i2][j2] - val1 - val2 + val3
# 经过公式化简,目标是要让每个分块的xi的平方和最小
# dp(i1, j1, i2, j2)表示左上角是i1, j1 右下角是i2, j2的矩形切分k次的所有方案的分块价值平方和的最小值
from functools import lru_cache
@lru_cache(typed=False, maxsize=128000000)
def dp(i1, j1, i2, j2, k):
if k == 0:
return get_sum(i1, j1, i2, j2)*get_sum(i1, j1, i2, j2)
if i2 == i1 and j2 == j1:
# 无法切分
return 0x7fffffff
# 纵着切分
ans = 0x7fffffff
for i in range(i1, i2):
val1 = get_sum(i1, j1, i, j2)*get_sum(i1, j1, i, j2) + dp(i+1, j1, i2, j2, k-1)
val2 = get_sum(i+1, j1, i2, j2)*get_sum(i+1, j1, i2, j2) + dp(i1, j1, i, j2, k-1)
ans = min(ans, val1, val2)
# 横着切分
for j in range(j1, j2):
val1 = get_sum(i1, j1, i2, j)*get_sum(i1, j1, i2, j) + dp(i1, j+1, i2, j2, k-1)
val2 = get_sum(i1, j+1, i2, j2)*get_sum(i1, j+1, i2, j2) + dp(i1, j1, i2, j, k-1)
ans = min(ans, val1, val2)
return ans
total = 0
for i in range(8):
total += sum(grid[i])
mean = total / N
square_sum = dp(0, 0, 7, 7, N-1)
ans = math.sqrt((square_sum - N * mean * mean) / N)
print('%.3f' % ans)