#include <bits/stdc++.h>
using namespace std;
const long long N = 18;
const long long NN = (1 << N);
int n;
long long tot;
long double dp[NN][N];
bool vis[NN][N];
long double prob[N][N];
const long double EPS = 1e-9;
inline long double maior(long double a, long double b) {
  if (a - b < EPS) return b;
  return a;
}
long double calc(long long mask, int i) {
  if (mask == tot) return i == 0;
  long double &ans = dp[mask][i];
  if (!vis[mask][i]) {
    ans = 0;
    vis[mask][i] = 1;
    for (int j = 0; j < n; ++j) {
      if (!(mask & (1 << j)))
        ans = maior(ans, calc(mask | (1 << j), j) * prob[j][i] +
                             calc(mask | (1 << j), i) * prob[i][j]);
    }
  }
  return ans;
}
int main() {
  ios_base ::sync_with_stdio(0);
  cin.tie(0);
  cout.precision(12);
  cin >> n;
  tot = (1 << n) - 1;
  memset(vis, 0, sizeof vis);
  for (int i = 0; i < n; ++i)
    for (int j = 0; j < n; ++j) cin >> prob[i][j];
  long double ans = 0;
  for (int i = 0; i < n; ++i) ans = maior(ans, calc(1LL << i, i));
  cout << fixed << ans << '\n';
}
