#include <bits/stdc++.h>
using namespace std;
const int MAXN = 70;
long double dp[MAXN][MAXN];
long double a[MAXN][MAXN];
long double sm[MAXN][MAXN][MAXN];
char used[MAXN][MAXN][MAXN];
void go(int lvl, int L, int R, int v) {
  if (sm[L][R][v] == 1) {
    return;
  }
  used[L][R][v] = 1;
  if (lvl == 0) {
    return;
  }
  int len = 1 << lvl;
  sm[L][R][v] = dp[lvl][v] * len / 2;
  int M = L + len / 2;
  if (v < M) {
    go(lvl - 1, L, M - 1, v);
    sm[L][R][v] += sm[L][M - 1][v];
    long double mx = 0;
    for (int i = M; i <= R; ++i) {
      go(lvl - 1, M, R, i);
      mx = max(mx, sm[M][R][i]);
    }
    sm[L][R][v] += mx;
  } else {
    go(lvl - 1, M, R, v);
    sm[L][R][v] += sm[M][R][v];
    long double mx = 0;
    for (int i = L; i < M; ++i) {
      go(lvl - 1, L, M - 1, i);
      mx = max(mx, sm[L][M - 1][i]);
    }
    sm[L][R][v] += mx;
  }
}
int main() {
  int n;
  cin >> n;
  int sz = 1 << n;
  for (int i = 0; i < sz; ++i) {
    for (int j = 0; j < sz; ++j) {
      cin >> a[i][j];
      a[i][j] = 1.0 * a[i][j] / 100;
    }
  }
  for (int i = 0; i < sz; ++i) {
    dp[0][i] = 1;
  }
  for (int lvl = 1; lvl <= n; ++lvl) {
    int len = 1 << lvl;
    int len2 = len >> 1;
    for (int st = 0; st < sz; st += len) {
      long double mx = 0;
      for (int t = 0; t < 2; ++t) {
        for (int i = 0; i < len2; ++i) {
          dp[lvl][st + i + t * len2] = 0;
          for (int j = 0; j < len2; ++j) {
            dp[lvl][st + i + t * len2] +=
                dp[lvl - 1][st + i + t * len2] *
                dp[lvl - 1][st + j + (1 - t) * len2] *
                a[st + i + t * len2][st + j + (1 - t) * len2];
          }
          mx = max(mx, dp[lvl][st + i + t * len2]);
        }
      }
    }
  }
  long double ans = 0;
  for (int i = 0; i < sz; ++i) {
    go(n, 0, sz - 1, i);
    ans = max(ans, sm[0][sz - 1][i]);
  }
  cout << fixed << setprecision(10) << ans << endl;
  return 0;
}
