#include <bits/stdc++.h>
using namespace std;
const int mn = 18;
int n;
double p[mn][mn];
double d[mn][1 << mn];
double dp(int x, int S) {
  double &ans = d[x][S];
  if (ans != -1) return ans;
  ans = 0;
  for (int i = 0; i < n; i++) {
    if ((S & (1 << i)) != 0 && i != x) {
      ans = max(ans, dp(x, (S ^ (1 << i))) * p[x][i] +
                         dp(i, (S ^ (1 << i))) * p[i][x]);
    }
  }
  return ans;
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) scanf("%lf", &p[i][j]);
  }
  for (int i = 0; i < n; i++) {
    for (int j = 1; j < (1 << n); j++) d[i][j] = -1;
  }
  d[0][0] = 1;
  for (int i = 1; i < n; i++) d[i][0] = 0;
  double ans = 0;
  for (int i = 0; i < n; i++) ans = max(ans, dp(i, ((1 << n) - 1) ^ 1 << i));
  printf("%.15f\n", ans);
  return 0;
}
