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"

#define ALL(g) (g).begin(),(g).end()
#define REP(i, x, n) for(int i = x; i < n; i++)
#define rep(i,n) REP(i,0,n)
#define RREP(i, x, n) for(int i = x; i >= n; i--)
#define rrep(i, n) RREP(i,n,0)
#define EXIST(s,e) ((s).find(e)!=(s).end())
#define pb push_back

using namespace std;

using ll = long long;
using P = pair<int,int>;

const int mod=1e9+7,INF=1<<30;
const double EPS=1e-12,PI=3.1415926535897932384626;
const ll LINF=1LL<<60, lmod = 1e9+7;

const int MAX_N = 100005;
ll fact[MAX_N];
int right[2*MAX_N];
vector<P> vec;

int main(){
  ll N; cin >> N;
  rep(i,N){
    int a; scanf("%d",&a);
    vec.pb(P(a,1));
  }
  rep(i,N){
    int a; scanf("%d",&a);
    vec.pb(P(a,-1));
  }
  sort(ALL(vec));
  ll ans = 1LL;
  ll cnt = 0;
  int pre;
  rrep(i,2*N-1){
    if(cnt==0){
      pre = vec[i].second;
    }
    if(vec[i].second==pre){
      cnt++;
    }else{
      (ans *= cnt) %= lmod;
      cnt--;
    }
  }
  cout << ans << endl;
  return 0;
}