#include <bits/stdc++.h>
using namespace std;
int n;
double mat[20][20], ans = 0;
double dp[20][272144];
bool vis[20][272144];
double func(int win, int mask) {
  if (__builtin_popcountll(mask) == 1) {
    if (mask == 1) return 1.0;
    return 0.0;
  }
  if (vis[win][mask]) return dp[win][mask];
  vis[win][mask] = 1;
  double ret = 0;
  for (int i = (int)(0); i <= (int)(n - 1); i++) {
    if (!((1 << i) & mask)) continue;
    if (i == win) continue;
    ret = max(ret, mat[win][i] * func(win, mask ^ (1 << i)) +
                       mat[i][win] * func(i, mask ^ (1 << win)));
  }
  dp[win][mask] = ret;
  return ret;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cin >> n;
  for (int i = (int)(0); i <= (int)(n - 1); i++)
    for (int j = (int)(0); j <= (int)(n - 1); j++) cin >> mat[i][j];
  for (int i = (int)(0); i <= (int)(n - 1); i++)
    ans = max(ans, func(i, (1 << n) - 1));
  printf("%0.9lf\n", ans);
  return 0;
}
