#include <bits/stdc++.h>
using namespace std;
const int MOD = 1000000007;
double PI = 4 * atan(1);
double ar[18][262144], beat[18][18];
bool done[18][262144];
long long des;
int n;
double dp(int cur, int used) {
  if (done[cur][used]) return ar[cur][used];
  double curans = 0;
  if (cur == 0) {
    if (used == des) return 1;
    for (int i = 0; i < n; i++)
      if ((used & (1 << i)) == 0 && i != 0) {
        curans = max(curans, beat[0][i] * dp(0, used | (1 << i)));
      }
  } else {
    for (int i = 0; i < n; i++) {
      if ((used & (1 << i)) == 0 && i != cur) {
        if (i == 0)
          curans = beat[0][cur] * dp(0, used | (1 << cur));
        else
          curans = max(curans, dp(cur, used | (1 << i)) * beat[cur][i] +
                                   dp(i, used | (1 << cur)) * beat[i][cur]);
      }
    }
  }
  done[cur][used] = 1, ar[cur][used] = curans;
  return curans;
}
int main() {
  ios_base::sync_with_stdio(0);
  double ans = 0;
  cin >> n;
  des = (long long)pow(2, n) - 2;
  for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++) cin >> beat[i][j];
  for (int i = 0; i < n; i++) ans = max(ans, dp(i, 0));
  cout << fixed << setprecision(10) << ans;
}
