#include <bits/stdc++.h>
using namespace std;
int N;
double a[64][64];
double dp[128][64][64];
double prob[128][64];
void probf(int rt, int l, int r, int w) {
  double &ans = prob[rt][w];
  if (ans >= -0.5) return;
  if (l == r) {
    ans = 1;
    return;
  }
  int m = (l + r) / 2;
  for (int i = l; i <= m; i++) probf(rt * 2, l, m, i);
  for (int i = m + 1; i <= r; i++) probf(rt * 2 + 1, m + 1, r, i);
  ans = 0;
  if (w <= m)
    for (int i = m + 1; i <= r; i++)
      ans += prob[rt * 2][w] * prob[rt * 2 + 1][i] * a[w][i];
  else
    for (int i = l; i <= m; i++)
      ans += prob[rt * 2 + 1][w] * prob[rt * 2][i] * a[w][i];
}
void dpf(int rt, int l, int r, int w, int rw, int p) {
  double &ans = dp[rt][w][rw];
  if (ans >= -0.5) return;
  ans = 0;
  if (l == r) return;
  int m = (l + r) / 2;
  for (int i = l; i <= m; i++)
    for (int j = l; j <= m; j++) dpf(rt * 2, l, m, i, j, p >> 1);
  for (int i = m + 1; i <= r; i++)
    for (int j = m + 1; j <= r; j++) dpf(rt * 2 + 1, m + 1, r, i, j, p >> 1);
  if (w <= m) {
    for (int j = m + 1; j <= r; j++) {
      double cans = 0;
      for (int i = l; i <= m; i++)
        for (int k = m + 1; k <= r; k++)
          cans += (dp[rt * 2][w][i] + dp[rt * 2 + 1][j][k]) * prob[rt * 2][i] *
                  prob[rt * 2 + 1][k];
      if (w == rw) cans += p;
      ans = max(ans, cans);
    }
  } else {
    for (int j = l; j <= m; j++) {
      double cans = 0;
      for (int i = m + 1; i <= r; i++)
        for (int k = l; k <= m; k++)
          cans += (dp[rt * 2 + 1][w][i] + dp[rt * 2][j][k]) *
                  prob[rt * 2 + 1][i] * prob[rt * 2][k];
      if (w == rw) cans += p;
      ans = max(ans, cans);
    }
  }
}
int main(int argc, char *argv[]) {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  cin >> N;
  for (int i = 0; i < (1 << N); i++)
    for (int j = 0; j < (1 << N); j++) {
      cin >> a[i][j];
      a[i][j] /= 100;
    }
  for (int i = 0; i < 2 * (1 << N); i++)
    for (int j = 0; j < (1 << N); j++) {
      prob[i][j] = -1;
      for (int k = 0; k < (1 << N); k++) dp[i][j][k] = -1;
    }
  for (int i = 0; i < (1 << N); i++) probf(1, 0, (1 << N) - 1, i);
  for (int i = 0; i < (1 << N); i++)
    for (int j = 0; j < (1 << N); j++)
      dpf(1, 0, (1 << N) - 1, i, j, (1 << (N - 1)));
  double ans = 0;
  for (int i = 0; i < (1 << N); i++) {
    double cans = 0;
    double cprob = 0;
    for (int j = 0; j < (1 << N); j++) cans += dp[1][i][j] * prob[1][j];
    ans = max(ans, cans);
  }
  cout << fixed << setprecision(10) << ans << endl;
  return 0;
}
