#arc157d. [arc157_d]YY Garden
[arc157_d]YY Garden
问题描述
有一个 行 列的网格,每个方格上都写着字符 X
和 Y
。设 表示从上方开始第 行第 列的方格,网格上的字符由 个字符串 给出: 的第 个字符表示方格 上的字符。
你可以在相邻的行和列之间设置篱笆,篱笆可以交叉。在设置完篱笆后,从某个方格出发,通过一次次向相邻方格上下左右移动但不能穿越篱笆,可以到达的所有方格构成一个 块。(见样例输出1)
共有 种设置篱笆的方法。求有多少种方法满足以下条件,并输出结果模 :
条件: 每个块中恰好有两个方格上写有 Y
。
约束条件
- 是长度为 的由
X
和Y
构成的字符串。
输入
输入使用以下格式从标准输入给出:
输出
输出满足条件的设置篱笆的方法数,结果要模 。
样例一
2 3
XYY
YXY
样例一输出
2
以下是八种设置篱笆的方法。
X Y Y X|Y Y X Y|Y X|Y|Y
| | | |
Y X Y Y|X Y Y X|Y Y|X|Y
X Y Y X|Y Y X Y|Y X|Y|Y
----- -+--- ---+- -+-+-
Y X Y Y|X Y Y X|Y Y|X|Y
例如,如果在第二列和第三列之间设置了篱笆,得到的块为:
XY
YX
``````plain
Y
Y
每个块中都有恰好两个 Y
,所以满足条件。
如果在第一行和第二行之间以及第一列和第二列之间设置了篱笆,得到的块为:
X
``````plain
YY
``````plain
Y
``````plain
XY
除了第二个块外,其它的块中没有恰好两个 Y
,所以不满足条件。
样例二
2 3
XYX
YYY
样例二输出
0
没有一种方式可以设置篱笆满足条件。
样例三
2 58
YXXYXXYXXYXXYXXYXXYXXYXXYXXYXXYXXYXXYXXYXXYXXYXXYXXYXXYXXY
YXXYXXYXXYXXYXXYXXYXXYXXYXXYXXYXXYXXYXXYXXYXXYXXYXXYXXYXXY
样例三输出
164036797
以模 的形式输出结果。