#include <bits/stdc++.h>
using namespace std;
bool is_power(int n) {
  if (n == 1) return true;
  int rem = n % 2;
  if (!rem)
    return is_power(n / 2);
  else
    return false;
}
struct player {
  double prob;
  double score;
};
void printMap(map<int, player> map) {
  cout.precision(10);
  for (auto& i : map)
    cout << i.first << " " << i.second.prob << "," << i.second.score << endl;
}
map<int, player> update(map<int, player> map1, map<int, player> map2,
                        int reward, vector<vector<double>>& probs) {
  map<int, player> res;
  for (auto& i : map1) {
    player p;
    player player1 = i.second;
    double max = -1.0;
    double score;
    double prob = 0;
    for (auto& j : map2)
      prob += player1.prob * j.second.prob * probs[i.first - 1][j.first - 1];
    for (auto& j : map2) {
      player player2 = j.second;
      score = player1.score + player2.score + prob * reward;
      if (score > max) {
        max = score;
      }
      p.score = max;
      p.prob = prob;
    }
    res[i.first] = p;
  }
  return res;
}
map<int, player> compute_block(int start, int size,
                               vector<vector<double>>& probs) {
  assert(is_power(size));
  if (size == 2) {
    player player1, player2;
    player1.prob = probs[start - 1][start];
    player2.prob = probs[start][start - 1];
    player1.score = player1.prob;
    player2.score = player2.prob;
    map<int, player> res;
    res[start] = player1;
    res[start + 1] = player2;
    return res;
  }
  int middle = start + size / 2 - 1;
  map<int, player> map1 = compute_block(start, size / 2, probs);
  map<int, player> map2 = compute_block(middle + 1, size / 2, probs);
  map<int, player> res1 = update(map1, map2, size / 2, probs);
  map<int, player> res2 = update(map2, map1, size / 2, probs);
  res1.insert(res2.begin(), res2.end());
  return res1;
}
int main() {
  int m;
  cin >> m;
  int n = 1 << m;
  vector<vector<double>> probs;
  for (int i = 0; i < n; i++) {
    probs.push_back(vector<double>());
    for (int j = 0; j < n; j++) {
      int temp;
      cin >> temp;
      probs[i].push_back((double)temp / 100);
    }
  }
  map<int, player> res = compute_block(1, n, probs);
  double max = -1.0;
  cout.precision(10);
  for (auto& p : res) {
    if (p.second.score > max) max = p.second.score;
  }
  cout << max << endl;
  return 0;
}
