There are N computers and N sockets in a one-dimensional world. The coordinate of the i-th computer is a_i, and the coordinate of the i-th socket is b_i. It is guaranteed that these 2N coordinates are pairwise distinct.

Snuke wants to connect each computer to a socket using a cable. Each socket can be connected to only one computer.

In how many ways can he minimize the total length of the cables? Compute the answer modulo 10^9+7.

Constraints

* 1 ≤ N ≤ 10^5
* 0 ≤ a_i, b_i ≤ 10^9
* The coordinates are integers.
* The coordinates are pairwise distinct.

Input

The input is given from Standard Input in the following format:


N
a_1
:
a_N
b_1
:
b_N


Output

Print the number of ways to minimize the total length of the cables, modulo 10^9+7.

Examples

Input

2
0
10
20
30


Output

2


Input

3
3
10
8
7
12
5


Output

1
#include<bits/stdc++.h>
//using namespace std;
#define rep(i,j,n) for(int i=(int)(j);i<(int)(n);i++)
#define REP(i,j,n) for(int i=(int)(j);i<=(int)(n);i++)
#define per(i,j,n) for(int i=(int)(j);(int)(n)<=i;i--)
#define ll long long
#define ALL(a) (a).begin(),(a).end()
#define disup(A,key) distance(A.begin(),upper_bound(ALL(A),(int)(key)))
#define dislow(A,key) distance(A.begin(),lower_bound(ALL(A),(int)(key)))
#define pb push_back
#define mp make_pair
#define endl "\n"
using std::cin;
using std::cout;
using std::vector;
using std::pair;
using std::string;
using std::upper_bound;
using std::lower_bound;
using vi=vector<int>;
using vii=vector<vi>;
using pii=pair<int,int>;
const ll MOD=1e9+7;
const int MAX=1e5+1;
const ll INF=(1ll<<62)-1;
signed main(){
    int N; cin>>N;
    vector<pii> a(2*N);
    rep(i,0,2*N){
        cin>>a[i].first;
        a[i].second=i/N;
    }
    sort(ALL(a));
    vi cnt(2);
    ll ans=1;
    rep(i,0,2*N){
        int mem=a[i].second;
        cnt[mem]++;
        if(cnt[mem]<=cnt[1-mem]){
            ans*=cnt[1-mem];
            ans%=MOD;
            cnt[0]--;
            cnt[1]--;
        }
    }
    cout<<ans<<endl;
}

