#include //#include //#include using namespace std; //using namespace boost::multiprecision; //using namespace atcoder; #define rep(i,n) for(int i=0;i<(n);++i) #define lep(i,n) for(long long i=0;i<(n);++i) #define all(x) (x).begin(),(x).end() #define rall(x) (x).rbegin(),(x).rend() #define equals(a,b) (fabs((a)-(b)) using vc = vector; template using pp=pair; template using PQ = priority_queue,greater>; using vi=vc ; using vvi=vc; using vvvi=vc; using vl=vc; using vvl=vc; using vvvl=vc; using pi=pp; using pd=pp; using pl=pp; using pip=pp; using vpi=vc; using vvpi=vc; using vs=vc; using vss=vc; using vst=vc>; const int dx[4]={1,0,-1,0}; const int dy[4]={0,1,0,-1}; const int inf=1001001001; const ll infl=100100100100100100; const double eps=(1e-10); const ll mod=1000000007; template inline bool chmax(T& a, T b) { if (a < b) { a = b; return true; } return false; } template inline bool chmin(T& a, T b) { if (a > b) { a = b; return true; } return false; } template void rprint(T &a) {printf("%.10f\n",a);} template void coutarray(vc& v) { rep(i, sz(v)) {cout << " "; cout << v[i];} cout << endl; } template void coutmatrix(vc>& v) { rep(i,sz(v)) { rep(j, sz(v[i])) {cout << " "; cout << v[i][j]; } cout << "\n";} }; int main(){ int n; cin>>n; vi a(n); rep(i,n)cin>>a[i]; vi b(n); rep(i,n)cin>>b[i]; sort(all(b)); sort(all(a)); int test=0; int kati=0; do{ do{ test++; int akati=0,bkati=0; rep(i,n){ if(a[i]>b[i])akati++; if(a[i]bkati)kati++; }while(next_permutation(all(b))); }while(next_permutation(all(a))); double ans=(double)kati/test; rprint(ans); return 0; }