#include <bits/stdc++.h>
using namespace std;
int n;
int m;
int A[100][100];
long double freecost(int v, int lvl);
vector<vector<long double> > fcache;
vector<vector<long double> > wcache;
pair<int, int> leaves(int v, int lvl) {
  int shift = n + 1 - lvl;
  v %= 1 << (lvl - 1);
  return {(v << shift), ((v + 1) << shift)};
}
long double winsthere(int wins, int lvl) {
  if (lvl == n + 1) return 1;
  if (wcache[lvl][wins] != -1) return wcache[lvl][wins];
  int sigbit = (1 << (n - lvl));
  bool right = wins & sigbit;
  int v = ((m + wins) >> (n + 1 - lvl));
  int oppool = (v * 2) + (!right);
  long double win = 0;
  auto a = leaves(oppool, lvl + 1);
  long double themsum = 0;
  for (int opponent = (a.first); opponent < (a.second); opponent++) {
    long double gthem = winsthere(opponent, lvl + 1);
    themsum += gthem;
    long double chance = (long double)A[wins][opponent] / 100;
    chance *= gthem;
    win += chance;
  }
  long double gus = winsthere(wins, lvl + 1);
  win *= gus;
  win /= themsum;
  return wcache[lvl][wins] = win;
}
long double cost(int v, int wins, int lvl) {
  if (lvl >= n + 1) return 0;
  assert(v < 4 * m);
  assert(lvl > 0 && lvl <= n);
  int sigbit = (1 << (n - lvl));
  bool right = wins & sigbit;
  int forcedson = (v * 2) + right;
  long double prevcost =
      cost(forcedson, wins, lvl + 1) + freecost(forcedson ^ 1, lvl + 1);
  return prevcost + winsthere(wins, lvl) * (1 << (n - lvl));
}
long double freecost(int v, int lvl) {
  if (lvl >= n + 1) return 0;
  if (fcache[lvl][v] != -1) return fcache[lvl][v];
  auto a = leaves(v, lvl);
  long double ma = 0;
  for (int i = (a.first); i < (a.second); i++) ma = max(ma, cost(v, i, lvl));
  return fcache[lvl][v] = ma;
}
int main(void) {
  ios::sync_with_stdio(false);
  cin >> n;
  m = 1 << n;
  fcache.resize(n + 3);
  for (int i = (0); i < ((n + 3)); i++) fcache[i].resize(4 * m, -1);
  wcache.resize(n + 3);
  for (int i = (0); i < ((n + 3)); i++) wcache[i].resize(4 * m, -1);
  for (int i = (0); i < ((m)); i++)
    for (int j = (0); j < ((m)); j++) cin >> A[i][j];
  long double res = freecost(1, 1);
  cout << fixed << setprecision(10) << res << "\n";
}
