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