AT_tenka1_2015_final_e 天下一コップ

Description

[problemUrl]: https://atcoder.jp/contests/tenka1-2015-final/tasks/tenka1_2015_final_e $ N $ 個の長方形がある。 $ i $ 番目の長方形は幅が $ w_i $ で高さが $ h_i $ である。 $ N $ 個の長方形を好きな順序で並べてコップを作る。 このとき、それぞれの長方形は回転させずに、すべての長方形の底辺が一直線上にあるようにする。 また、隣り合う長方形同士がちょうど接するようにする。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/AT_tenka1_2015_final_e/c54c13efcd6eae019d610c5d5c20d4cfe0be9b78.png)図 1 : コップの例 コップを水で満杯にすることを考える。 このとき、座標 $ P $ に水が存在するための必要十分条件は以下である。 - $ P $ はどの長方形の内部にもない。 - $ P $ から左および右向きへ半直線を引いたとき、どちらの半直線もいずれかの長方形と共有点を持つ。 コップを水で満杯にしたとき、水が存在する領域の総面積を *容積* と呼ぶ。 ![](https://cdn.luogu.com.cn/upload/vjudge_pic/AT_tenka1_2015_final_e/94a979681e57e8f5928e3f074f3454658b188226.png)図 2 : コップを水で満杯にした例 (容積 71) 長方形を並べてコップを作る作り方は全部で $ N! $ 通りである。それら $ N! $ 通りのコップの容積の和を $ 10^9+7 $ で割った余りを求めよ。

Input Format

入力は以下の形式で標準入力から与えられる。 > $ N $ $ w_1 $ $ h_1 $ $ w_2 $ $ h_2 $ $ : $ $ w_N $ $ h_N $ - $ 1 $ 行目には、長方形の個数を表す整数 $ N $ ($ 3≦N≦10^5 $) が与えられる。 - $ 2 $ 行目からの $ N $ 行のうち $ i $ 行目には、$ i $ 番目の長方形の幅と高さを表す整数 $ w_i,h_i $ ($ 1≦w_i,h_i≦10^9 $) が空白区切りで与えられる。

Output Format

$ N! $ 通りのコップの容積の和を $ 10^9+7 $ で割った余りを出力せよ。 出力の末尾には改行を入れること。

Explanation/Hint

### 部分点 この問題には部分点が設定されている。 - $ 3≦N≦8 $ を満たすデータセットに正解した場合は $ 15 $ 点が得られる。 - $ 3≦N≦2,000 $ を満たすデータセットに正解した場合はさらに $ 55 $ 点が得られる。 - $ 3≦N≦10^5 $ を満たすデータセットに正解した場合はさらに $ 70 $ 点が得られる。合計で $ 140 $ 点となる。 ### Sample Explanation 1 $ 6 $ 通りのコップの容積の和は $ 24 $ である。 !\[\](http://tenka1-2015-final.contest.atcoder.jp/img/other/tenka\_2015\_final/hoge/cup\_3.png) ### Sample Explanation 2 幅および高さが等しい長方形同士も区別して並べる。