#include <bits/stdc++.h>
using namespace std;
clock_t start_time, end_time;
inline float ellapse() { return (clock() - start_time) * 1.0 / CLOCKS_PER_SEC; }
long long int gcd(long long int a, long long int b) {
  return b == 0 ? a : gcd(b, a % b);
}
long long power(long long a, long long b) {
  long long ret = 1;
  while (b) {
    if (b % 2 == 1) ret = (ret * a) % 1000000007;
    a = (a * a) % 1000000007;
    b /= 2;
  }
  return ret;
}
double prob[111][111], arr[111][111], ans[111][111];
int n;
void solve(int x, int y, int rounds, int points) {
  if (x == y) return;
  int mid = (x + y) / 2;
  solve(x, mid, rounds - 1, points / 2);
  solve(mid + 1, y, rounds - 1, points / 2);
  for (int i = x; i <= mid; i++) {
    for (int j = mid + 1; j <= y; j++) {
      ans[i][rounds] = max(ans[i][rounds], ans[j][rounds - 1]);
      ans[j][rounds] = max(ans[j][rounds], ans[i][rounds - 1]);
    }
  }
  for (int i = x; i <= y; i++)
    ans[i][rounds] += ans[i][rounds - 1] + prob[i][rounds] * points;
}
int main() {
  cin >> n;
  int m = 1;
  for (int i = 1; i <= n; i++) m *= 2;
  for (int i = 1; i <= m; i++) {
    for (int j = 1; j <= m; j++) {
      cin >> arr[i][j];
      arr[i][j] /= 100.0;
    }
  }
  for (int i = 1; i <= m; i += 2) {
    prob[i][0] = prob[i + 1][0] = 1;
    prob[i][1] = arr[i][i + 1];
    prob[i + 1][1] = arr[i + 1][i];
  }
  int last_val = 2, new_val = last_val;
  for (int rounds = 2; rounds <= n; rounds++) {
    new_val *= 2;
    for (int i = 1; i <= m; i++) {
      double prob_last = prob[i][rounds - 1];
      for (int j = 1; j <= m; j++) {
        int a = (i - 1) / last_val;
        int b = (j - 1) / last_val;
        int c = (i - 1) / new_val;
        int d = (j - 1) / new_val;
        if (a != b && c == d) {
          prob[i][rounds] += prob_last * prob[j][rounds - 1] * arr[i][j];
        }
      }
    }
    last_val = new_val;
  }
  solve(1, m, n, m / 2);
  double _ans = 0;
  for (int i = 1; i <= m; i++) _ans = max(_ans, ans[i][n]);
  printf("%.12lf\n", _ans);
  return 0;
}
