0647 - JOI文字列(JOI Strings)

時間制限 3 秒 / メモリ制限 1024 MB / 得点 100 / Writer root / x 1 / 統計 /

    タグ:

TLE
3sec
MLE
1024MB
得点
100

問題文

文字列 S が与えられる。
S は J,O,I,?の 4 つの文字で構成される。
?は、そこに J,O,I のどれが入 るか分からないということである。
JOI 文字列とは、次のようなものである。

・J が A 個、O が B 個、I が C 個 連続して並ぶ文字列 のことである。
・A>B>C かつ C>0 を満たさなければ ならない。
・よって、JOI 文字列は 6 文字以上でなければならない。
・例えば、"JJJOOI"や"JJJJJJJOOOOOOII"などはJOI文字列である。

JOI 文字列を【部分文字列として】文字列 S に含むものの通り数を 1,000,000,007 で割った余りを求めよ。
ただし、|S|≦5 のとき、必ず答えは 0 となる。
入力は、JOI という 3 文字の行で終わりとなる。

制約

1≦|S|≦200 を満たす。

部分点

20 点分のテストケースは、1≦|S|≦10 を満たす。
50 点分のテストケースは、1≦|S|≦40 を満たす。
100 点分のテストケースは、1≦|S|≦200 を満たす。

入力例

???????I?O
I?J???J?I?
O???IJI???
?II?????OI
??O??????J
??OJ??IJ?O
??????????
JOI

出力例

48
0
0
9
9
0
433