#icpc2013summerday3e. [icpc2013summer_day3_e]順位付け
[icpc2013summer_day3_e]順位付け
イクタ君の住む町には個の塔がある。 それぞれの塔には0からまでの異なる番号が与えられており、番号の塔を塔と呼ぶ。 好奇心旺盛なイクタ君は個の塔の高さに興味を持ち、それらの大小関係を表す表を作ることにした。 は個の要素を持ち、各要素は次のように定義される。
イクタ君は表を作成するための調査として、2つの塔を選びそれらの高さを比較するということを回繰り返した。
イクタ君の調査に関して以下のことがわかっている。
-
回目の比較で塔, 塔が選ばれたとすると塔の高さが塔の高さより大きかった。つまり, であった。
-
それぞれの塔は自分自身よりも大きな塔とは高々一回しか比較されていない。
残念ながらイクタ君の調査による情報だけで表の内容を一意に決めることができるとは限らない。 表がイクタ君の調査と矛盾せず、が定義されるような塔の高さの組み合わせが存在するときを正しい表と呼ぶことにする。 正しい表として何通りのものが考えられるかを計算してイクタ君に教えて欲しい。
ただし、比較された2つの塔の高さは互いに異なるがすべての塔の高さが互いに異なるとは限らない。
Input
入力は以下の形式で与えられる。
...
は塔の数を表す。 , ()は塔が塔より高いことを表す。
Constraints
入力中の各変数は以下の制約を満たす。
-
-
-
-
異なる塔が同じ高さであることもある。
-
イクタ君の調査結果自体が矛盾していることはなく、少なくとも1つイクタ君の調査結果と矛盾しない表が存在する。
Output
考えられる正しい表Tの個数の数を1,000,000,007で割ったあまりを出力せよ。
Sample Input 1
3
0 1
1 2
Output for the Sample Input 1
1
```
* 正しい表$T$は上図の1通りである。
Sample Input 2
--------------
```plain
3
0 1
0 2
Output for the Sample Input 2
3
```
* 正しい表$T$は上図の3通りである。
Sample Input 3
--------------
```plain
1
Output for the Sample Input 3
1
```
* 正しい表$T$は上図の1通りである。
Sample Input 4
--------------
```plain
7
0 1
1 2
2 3
3 4
0 5
0 6
Output for the Sample Input 4
91