#include #include #include #include #include #include #include #include #include #include #include #include #include #define rep(i, n) for (int i = 0; i < (int)(n); i++) #define rep2(i, s, n) for (int i = (int)(s); i < (int)(n); i++) #define all(x) x.begin(), x.end() using namespace std; using ll = long long; using ull = unsigned long long; using vi = vector; using vl = vector; using vll = vector; using vvi = vector; using vvl = vector; using vvll = vector; using vs = vector; using vb = vector; using vvb = vector; using vc = vector; using vvc = vector; using pii = pair; using pll = pair; using pil = pair; using vpii = vector; template T gcd(T a, T b) {if (a < b) swap(a, b); if (b == 0) return a; else return gcd(b, a%b);} template inline T ceil(T a, T b) {return (a+(b-1))/b;} template inline T floor(T a, T b) {return a/b;} const double PI = 3.141592653589793238; const ll MOD = 1000000007; const ll MODL = 2147483647; const int INF = 1000000007; const ll INFL = 1LL<<60; int main() { int n, score1, score2; double s1, s2; cin >> n; vi a(n); vi b(n); rep(i, n) cin >> a[i]; rep(i, n) cin >> b[i]; vi id(n); iota(all(id), 0); s1 = 0; s2 = 0; do { score1 = 0; score2 = 0; rep(i, n) { if (a[i] > b[id[i]]) score1++; else score2++; } if (score1 > score2) s1 += 1; else s2 += 1; } while (next_permutation(all(id))); cout << fixed << setprecision(10); cout << s1 / (s1+s2) << endl; }