#joi2014yod. [joi2014yo_d]部活のスケジュール表 (Schedule)

[joi2014yo_d]部活のスケジュール表 (Schedule)

問題

IOI 高校のプログラミング部には,J 君と O 君と I 君の 33 人の部員がいる.プログラミング部では,部活のスケジュールを組もうとしている.

今,NN 日間の活動のスケジュールを決めようとしている.各活動日のスケジュールとして考えられるものは,各部員については活動に参加するかどうかの 22 通りがあり,部としては全部で 88 通りある.部室の鍵はただ 11 つだけであり,最初は J 君が持っている.各活動日には,その日の活動に参加する部員のうちのいずれか 11 人が鍵を持っている必要があり,活動後に参加した部員のいずれかが鍵を持って帰る.

プログラミング部では,活動日には毎回必ず活動が行われるように,あらかじめ各活動日の責任者を定めた.責任者は,必ずその日の活動に出席しなければならない.

スケジュールを決めようとしている日数と,各活動日の責任者が誰であるかの情報が与えられた時,すべての活動日に部活動を行うことができるようなスケジュール表として考えられるものの数を 10,00710\\,007 で割った余りを求めるプログラムを作成せよ.ただし,部活の終了時に鍵を持って帰る部員は,その日の活動に参加している部員の誰でもよく,最終日は誰が鍵を持って帰ってもよいものとする.


入力

入力は,22 行からなる.

11 行目には,スケジュールを決めようとしている日数を表す 11 つの整数 NN (2leqqNleqq10002 \\leqq N \\leqq 1000) が書かれている.

22 行目には,各活動日の責任者を表す NN 文字からなる文字列が書かれている.この文字列の ii 文字目 (1leqqileqqN1 \\leqq i \\leqq N) は,ii 日目の活動日の責任者を表す.すなわち,ii 文字目が JOI であることはそれぞれ ii 日目の活動日の責任者が J 君,O 君,I 君であることを意味する.

出力

スケジュール表として考えられるものの数を 10,00710\\,007 で割った余りを 11 行で出力せよ.


入力例 1

2
OI

出力例 1

7

入出力例 11 において, 22 日間の活動日のスケジュールを考える.11 日目の責任者は O 君, 22 日目の責任者は I 君である.問題文の条件をみたすスケジュール表は 77 通り考えられる.

2014-yo-t4-fig01.png

この表では,J,O,I はそれぞれその日に J 君,O 君,I 君が参加することを表す.11 日目の責任者は O 君であるが,最初鍵を持っているのは J 君であるため,11 日目の活動には J 君,O 君の両方が参加する必要があることに注意せよ.また,11 日目に鍵を持って帰った人は 22 日目にも参加しないといけないので,11 日目と 22 日目の両方に参加する人が少なくとも 11 人存在しなければならないことに注意せよ.


入力例 2

20
JIOIJOIJOJOIIIOJIOII

出力例 2

4976

入出力例 22 において,条件をみたすスケジュール表は全部で 72,493,594,99272\\,493\\,594\\,992 通り考えられる.それを 10,00710\\,007 で割った余りである 4,9764\\,976 を出力する.