問題一覧 > 通常問題

No.310 2文字しりとり

レベル : / 実行時間制限 : 1ケース 6.000秒 / メモリ制限 : 512 MB / 標準ジャッジ問題
タグ : / 解いたユーザー数 11
作問者 : anta
5 ProblemId : 874 / 出題時の順位表 / 自分の提出
問題文最終更新日: 2015-12-24 18:44:07

問題文

この世界では文字はN種類あり、1からNまでの整数で表される。 2文字の単語は、1文字目をa, 2文字目をbとしたとき、2つの文字の組(a,b)として表される。 この世界は単語が豊富であり、M個の存在しない単語を除く全ての単語は辞書に載っている。つまり、N2M個の単語が辞書に載っている。

特殊なルールのしりとり「2文字しりとり」をすることにした。このしりとりは1人で行う。 2文字しりとりの1回のゲームは以下のようにして行われる。

  1. まず初めに辞書から単語を1つ選ぶ。
  2. このゲームでまだ選んでいない辞書中の単語のうち、最後に選んだ単語の2文字目と新たに選ぶ単語の1文字目が一致するようなものを1つ選ぶ。 つまり、最後に単語(a,b)を選んだあと新たに単語(c,d)を選ぶ場合、b=cでなければならない。 そのように単語を選ぶことを繰り返す。
  3. 選べる単語が無くなった時点でゲームは終了となる。

1回のゲームで辞書中のN2M個全ての単語を選んだ場合、そのゲームを完全であるという。

完全なゲームは何通りあるか?1000000007で割った余りを求めよ。 ただし、2つのゲームが異なるとは、単語を選ぶ順番が異なることをいう。

入力

N M
A1 B1

AM BM

1行目に、文字の種類数を表す整数N, 存在しない単語の個数を表す整数Mが空白区切りで与えられる。
2行目以降M行に、存在しない単語のリストが与えられる。 それぞれのi (1iM)に対し、1Ai,BiNであり、(Ai,Bi)の単語が存在しないことを表す。

  • 1N4000
  • 0M4000
  • 存在しない単語は重複しない。つまり、ijなら(Ai,Bi)(Aj,Bj)である。

出力

完全なゲームが何通りあるかを表す整数を1000000007で割った余りを1行に出力せよ。

サンプル

サンプル1
入力
2 1
1 2
出力
1

辞書に載っている単語は(1,1),(2,2),(2,1)の3つである。 この3つ全ての単語を選ぶためには必ず(2,2),(2,1),(1,1)の順番で選ばなければならない。 よって、答えは1となる。

サンプル2
入力
2 0
出力
4

最初にどの単語を選ぶ場合にもそれぞれ1通りあり、合計4通りとなる。

サンプル3
入力
2 4
2 2
1 2
1 1
2 1
出力
1

空のゲームも数える。

サンプル4
入力
3 3
1 3
3 1
3 2
出力
2
サンプル5
入力
3 0
出力
216
サンプル6
入力
10 0
出力
276247125

1000000007で割った余りを出力することに注意せよ。

提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。