#icpc2013summerday3e. [icpc2013summer_day3_e]順位付け

[icpc2013summer_day3_e]順位付け

イクタ君の塔

イクタ君の住む町にはN N 個の塔があります。それぞれの塔には0からN1 N-1 までの異なる番号が与えられており、番号iiの塔を塔iiと呼びます。好奇心旺盛なイクタ君はN N 個の塔の高さに興味を持ち、それらの大小関係を表す表T T を作成することにしました。T T N×N N \times N 個の要素を持ち、各要素Ti,j(0i,jN1) T_{i, j} (0 \leq i, j \leq N - 1) は次のように定義されます。

  • Ti,j=1 T_{i, j} = -1 ⇔ 塔iiの高さが塔jjの高さより小さい
  • Ti,j=0 T_{i, j} = 0 ⇔ 塔iiの高さと塔jjの高さが等しい
  • Ti,j=1 T_{i, j} = 1 ⇔ 塔iiの高さが塔jjの高さより大きい

イクタ君は表T T を作成するための調査として、2つの塔を選びそれらの高さを比較するということをN1 N-1 回繰り返しました。

イクタ君の調査に関して以下のことがわかっています。

  • i i 回目の比較(1iN1)(1 \leq i \leq N - 1)で塔aia_iと塔bib_iを選んだとすると、塔aia_iの高さが塔bib_iの高さよりも大きかったため、Tai,bi=1 T_{a_i, b_i} = 1 および Tbi,ai=1 T_{b_i, a_i} = -1 です。
  • 各塔は自分自身よりも大きな塔と高々1回しか比較されていません。

残念ながら、イクタ君の調査結果だけでは表T T の内容を一意に決定することはできません。表T T がイクタ君の調査と矛盾せず、T T が定義されるような塔の高さの組み合わせが存在する場合、T T を正しい表と呼ぶことにします。正しい表として考えられるものの数を計算し、イクタ君に教えてもらいましょう。

ただし、比較された2つの塔の高さは互いに異なるが、すべての塔の高さが互いに異なるとは限りません。

入力

入力は以下の形式で与えられます。

N N
a1 a_1 b1 b_1
...
aN1 a_{N-1} bN1 b_{N-1}

N N は塔の数を表し、ai a_i bi b_i (1iN1 1 \leq i \leq N - 1 )は、塔ai a_i が塔bi b_i よりも高いことを表します。

制約

入力中の各変数は以下の制約を満たします。

  • 1N200 1 \leq N \leq 200
  • 0ai,bi<N 0 \leq a_i, b_i < N
  • aibi a_i \neq b_i
  • 異なる塔が同じ高さであることもあります。
  • イクタ君の調査結果自体は矛盾していません。少なくとも1つのイクタ君の調査結果と矛盾しない表T T が存在します。

出力

考えられる正しい表T T の個数を1,000,000,007 1,000,000,007 で割った余りを出力してください。

入力例1

3
0 1
1 2

出力例1

1
  • 正しい表T T は上図の1通りです。

入力例2

3 
0 1
0 2 

出力例2

3
  • 正しい表T T は上図の3通りです。

入力例3

1 

出力例3

1
  • 正しい表T T は上図の1通りです。

入力例4

7
0 1
1 2
2 3
3 4
0 5
0 6

出力例4

91