'''
二维区间DP
'''import math
from functools import lru_cacheN = 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]@lru_cache(typed=False, maxsize=128000000)
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次的所有方案的分块价值平方和的最小值@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 = 0x7ffffffffor 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 anstotal = 0
for i in range(8):total += sum(grid[i])
mean = total / Nsquare_sum = dp(0, 0, 7, 7, N - 1)
ans = math.sqrt((square_sum - N * mean * mean) / N)print('%.3f' % ans)