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 C# (Mono 4.6.2.0) (judge verdict: Accepted)

using System;
using System.Collections.Generic;
using System.Linq;
class Program{
	static void Main(){
		const int mod=1000000007;
		int n=int.Parse(Console.ReadLine());
		long ans=1,p=0;
		int[][] a=new int[n*2][];
		for(int i=0;i<n;i++){a[i]=Array.ConvertAll((Console.ReadLine()+" 1").Split(),int.Parse);}
		for(int i=n;i<n*2;i++){a[i]=Array.ConvertAll((Console.ReadLine()+" -1").Split(),int.Parse);}
		Array.Sort(a,(u,v)=>u[0]-v[0]);
		for(int i=0;i<n*2;i++){
			p+=a[i][1];
			if(Math.Abs(p)>1&&Math.Sign(p)==Math.Sign(a[i][1])){ans=(ans*Math.Abs(p))%mod;}
		}
		Console.WriteLine(ans);
	}
}