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 <iostream>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <deque>
#include <algorithm>
using namespace std;
using ll = long long;

const ll MOD = 1e9 + 7;

int main() {
  int N;
  cin >> N;
  vector<ll> a(N), b(N);
  for (int i = 0; i < N; i++) {
    cin >> a[i];
  }
  for (int i = 0; i < N; i++) {
    cin >> b[i];
  }
  sort(a.begin(), a.end());
  sort(b.begin(), b.end());
  vector<int> sumL(N + 1, 0), sumG(N + 1, 0);
  for (int i = 0; i < N; i++) {
    sumL[i + 1] = sumL[i] + (b[i] < a[i]);
    sumG[i + 1] = sumG[i] + (b[i] > a[i]);
  }
  ll res = 1;
  int i = 0, j = 0;
  for (int k = 0; k < N; k++) {
    ll c = 1;
    if (b[k] < a[k]) {
      while (i < N && a[i] < b[k]) ++i;
      if (i < k) {
        c += sumL[k] - sumL[i];
      }
    } else {
      while (j < N && b[j] < a[k]) ++j;
      if (j < k) {
        c += sumG[k] - sumG[j];
      }
    }
    res = res * c % MOD;
  }
  cout << res << endl;
  return 0;
}
