Problem:
Score : 500 points

Problem Statement

#nck {
width: 30px;
height: auto;
}

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.

Sample Input 1

2
0
10
20
30

Sample Output 1

2

There are two optimal connections: 0-20, 10-30 and 0-30, 10-20.
In both connections the total length of the cables is 40.

Sample Input 2

3
3
10
8
7
12
5

Sample Output 2

1

Solution in PyPy3 (2.4.0) (judge verdict: Wrong Answer)

N = int(input())

mod = int(1e9+7)

def cmb(n, r):
    if (r < 0) or (n < r):
        return 0
    r = min(r, n - r)
    return fact[n] * factinv[r] * factinv[n-r] % mod

NMAX = 2*N + 5
fact = [0 for _ in range(NMAX)]
factinv = [0 for _ in range(NMAX)]
inv = [0 for _ in range(NMAX)]

fact[0:2] = [1, 1]  # fact[n] = (n! mod p)
factinv[0:2] = [1, 1]  # factinv[n] = ((n!)^(-1) mod p)
inv[0:2] = [0, 1]  # factinv 計算用
 
for i in range(2, NMAX):
  fact[i] = (fact[i-1] * i) % mod
  inv[i] = (-inv[mod % i] * (mod // i)) % mod
  factinv[i] = (factinv[i-1] * inv[i]) % mod

A = []
for _ in range(N):
  A.append([int(input()),1])
for _ in range(N):
  A.append([int(input()),2])
A.sort()

ans = 1
ca,cb = 0,0
prevN = 0
for a in A:
  if a[1] == 1:
    ca += 1
  else:
    cb += 1
  if ca == cb:

    wk = ca - prevN
    ans = ans * fact[wk] % mod

    prevN = ca
    
print(ans)