#joi2011yof. [joi2011yo_f]JOI 旗 (JOI Flag)
[joi2011yo_f]JOI 旗 (JOI Flag)
问题
日本信息奥林匹克委员会决定制作一面以JOI标志为主题的旗帜来宣传今年的日本信息奥林匹克(JOI)。这面旗帜必须是一面“好旗帜”。所谓“好旗帜”,是指将拉丁字母J、O、I三个字母排列成行列的长方形,并且满足J、O、I在旗帜上至少有一个位置上按照以下图中所示的方式排列(即O在J的右边,I在J的下方)。
下图是两个示例“好旗帜”。
下图是两个示例不是“好旗帜”。
现在已经确定了、的值以及部分旗帜位置上应该是字母J、O、I中的哪个字母,并将这些信息作为输入给出。请编写一个程序计算可能的“好旗帜”的数量,并将该数量除以所得的余数输出。
输入
输入由行组成。
第1行包含两个用空格分隔的整数和 ,表示旗帜的大小。
第行 包含一个由个字符组成的字符串。每个字符可以是J、O、I或?。如果第个字符是J、O或I,则表示第行第列的位置上的字符已经确定为相应的J、O或I;如果是?,则表示该位置尚未确定。
输出
请将可能的“好旗帜”的数量除以所得的余数以1行输出。
示例 1
2 3
??O
IIJ
输出示例 1
4
在示例1中,可以考虑到以下四种“好旗帜”。
示例 2
2 2
??
??
输出示例 2
3
示例 3
3 3
??I
???
O?J
输出示例 3
53
示例 4
5 4
JOI?
????
????
????
?JOI
输出示例 4
28218
对于示例4,有种可能的“好旗帜”,所以输出,即除以的余数。