#include <bits/stdc++.h>
using namespace std;
long long n;
long double arr[20][20];
long double cache[400000][20];
bool vis[400000][20];
long double dp(long long bit, long long pos) {
  if (__builtin_popcount(bit) == n) return (pos == 0) * 1.0;
  if (vis[bit][pos]) return cache[bit][pos];
  long double ans = 0.0;
  for (long long j = 0; j < n; j++)
    if (!(bit & (1 << j)))
      ans = max(ans, dp(bit | (1 << j), pos) * arr[pos][j] +
                         dp(bit | (1 << j), j) * arr[j][pos]);
  vis[bit][pos] = 1;
  return cache[bit][pos] = ans;
}
int32_t main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  ;
  cin >> n;
  if (n == 1) return cout << 1, 0;
  for (long long i = 0; i < n; i++)
    for (long long j = 0; j < n; j++) cin >> arr[i][j];
  long double ans = 0.0;
  for (long long i = 0; i < n; i++)
    for (long long j = i + 1; j < n; j++)
      ans = max(ans, dp((1 << i) | (1 << j), j) * arr[j][i] +
                         dp((1 << i) | (1 << j), i) * arr[i][j]);
  cout << fixed << setprecision(12) << ans << '\n';
}
