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;
typedef long long ll;
typedef long double ld;
#define rep(i, n) for (ll i = 0; i < n; i++)
#define FOR(i, a, b) for (ll i = a; i < b; i++)
#define len(v) ll(v.size())
#define fi first
#define se second

template <class T>
void cout_vec(const vector<T> &vec){
  for(auto itr:vec) cout<<itr<<' ';
  cout<<endl;
}

typedef pair<ll,bool> P;
const ll mod=1e9+7;
const ll inf=1e15;

int main(){
  cin.tie(0);
  ios::sync_with_stdio(false);
  int n;
  cin>>n;
  vector<P> a;
  rep(i,n){
    int x;
    cin>>x;
    a.push_back(P(x,true));
  }
  rep(i,n){
    int x;
    cin>>x;
    a.push_back(P(x,false));
  }
  sort(begin(a),end(a));
  vector<bool> b;
  rep(i,2*n) b.push_back(a[i].se);
  ll ans=1;
  bool now=b[0];
  ll cnt=0;
  rep(i,2*n){
    if(now==b[i]){
      cnt++;
      cnt%=mod;
    }else{
      (ans*=cnt)%=mod;
      cnt--;
      if(cnt==0 && i+1<2*n) now=b[i+1];
    }
  }
  cout<<ans<<endl;
}