#icpc2013summerday3e. [icpc2013summer_day3_e]順位付け

[icpc2013summer_day3_e]順位付け

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

  • Ti,j=1iの高さが塔jの高さより小さいTi, j = -1⇔ 塔iの高さが塔jの高さより小さい

  • Ti,j=0iの高さと塔jの高さが等しいTi, j = 0 ⇔ 塔iの高さと塔jの高さが等しい

  • Ti,j=1iの高さが塔jの高さより大きいTi, j = 1 ⇔ 塔iの高さが塔jの高さより大きい

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

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

  • ii回目の比較(1leqileqN1)(1 \\leq i \\leq \\ N - 1)で塔aiai, 塔bibiが選ばれたとすると塔aiaiの高さが塔bibiの高さより大きかった。つまりTai,bi=1Tai, bi = 1, Tbi,ai=1Tbi, ai = -1であった。

  • それぞれの塔は自分自身よりも大きな塔とは高々一回しか比較されていない。

残念ながらイクタ君の調査による情報だけで表TTの内容を一意に決めることができるとは限らない。 表TTがイクタ君の調査と矛盾せず、TTが定義されるような塔の高さの組み合わせが存在するときTTを正しい表と呼ぶことにする。 正しい表として何通りのものが考えられるかを計算してイクタ君に教えて欲しい。

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

Input

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

NN
a1a1 b1b1
...
aN1aN-1 bN1bN-1

NNは塔の数を表す。 aiai, bibi (1leqileqN11 \\leq i \\leq N - 1)は塔aiaiが塔bibiより高いことを表す。

Constraints

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

  • 1leqNleq2001 \\leq N \\leq 200

  • 0leqai,bi<N0 \\leq ai, bi < N

  • aineqbiai \\neq bi

  • 異なる塔が同じ高さであることもある。

  • イクタ君の調査結果自体が矛盾していることはなく、少なくとも1つイクタ君の調査結果と矛盾しない表TTが存在する。

Output

考えられる正しい表Tの個数の数を1,000,000,007で割ったあまりを出力せよ。

Sample Input 1

3
0 1
1 2

Output for the Sample Input 1

1
```![](/img/other/jag2013_summer_day3/Ordering_sample1.png)

*   正しい表$T$は上図の1通りである。
    

Sample Input 2
--------------

```plain
3 
0 1
0 2 

Output for the Sample Input 2

3
```![](/img/other/jag2013_summer_day3/Ordering_sample5.png)

*   正しい表$T$は上図の3通りである。
    

Sample Input 3
--------------

```plain
1 

Output for the Sample Input 3

1
```![](/img/other/jag2013_summer_day3/Ordering_sample4.png)

*   正しい表$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