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 <cstdio>
#include <algorithm>
#include <stack>
#include <map>
#define repi(i,a,b) for(int i=(a);i<(b);++i)
#define rep(i,a) repi(i,0,a)

using ll = long long;

constexpr ll mod = 1000000007;

int N;
ll x[200001];
std::map<ll, bool> fl;
ll ans = 1;

int main()
{
  scanf( "%d", &N );
  rep( i, N )
    scanf( "%lld", x+i ), fl[x[i]] = false;
  rep( i, N )
    scanf( "%lld", x+N+i ), fl[x[N+i]] = true;

  std::sort( x, x+2*N );

  std::stack<int> s, t;
  rep( i, 2*N )
  {
    if( fl[x[i]] )
    {
      if( !s.empty() )
      {
        ans *= s.size();
        s.pop();
        ans %= mod;
      }
      else
        t.push(x[i]);
    }
    else
    {
      if( !t.empty() )
      {
        ans *= t.size();
        t.pop();
        ans %= mod;
      }
      else
        s.push(x[i]);
    }
  }

  printf( "%lld\n", ans );

  return 0;
}