#include <bits/stdc++.h>
using namespace std;
int n;
double dp[18][1 << 18];
double p[18][18];
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n;
  for (long long i = 0; i <= n - 1; ++i) {
    for (long long j = 0; j <= n - 1; ++j) {
      cin >> p[i][j];
    }
  }
  int full = (1 << n) - 1;
  dp[0][full] = 1.0;
  for (long long mask = full - 1; mask >= 1; --mask) {
    for (long long i = 0; i <= n - 1; ++i) {
      if ((mask >> i) & 1) {
        if (!(mask & 1) || i == 0) {
          for (long long j = 0; j <= n - 1; ++j) {
            if (!((mask >> j) & 1)) {
              double val1 = dp[i][mask | (1 << j)] * p[i][j];
              double val2 = dp[j][mask | (1 << j)] * p[j][i];
              dp[i][mask] = max(dp[i][mask], val1 + val2);
            }
          }
        }
      }
    }
  }
  double ans = 0.0;
  for (long long i = 0; i <= n - 1; ++i) {
    ans = max(ans, dp[i][1 << i]);
  }
  cout << fixed << setprecision(10) << ans;
  return 0;
}
