#P7523. Cytoid
Cytoid
题目背景
众所周知,尽管很菜,但 colazcy 仍然很喜欢玩 Cytus。
题目描述
一天,colazcy 又在越级打谱。不到一分钟,colazcy 把手机一摔,骂道:“什么垃圾铺面!” 于是他准备在 Cytoid 上面做一个自制铺恶心别人。
colazcy 准备上一波劲爆 押,共有 排。也就是说,他的铺面是一个 的矩阵,其中每一个位置可以是 Drag 也可以是 Click。colazcy 已经确定了其中一些位置应该是什么元素,但剩下的还没有确定。
但是 colazcy 发现,他铺面对应的矩形如果有一个子矩形中所有元素都是 Drag,那么玩家就可以一直按住糊过去。colazcy 定义一张铺面的简单度为这张铺面对应的矩形中全都是 Drag 的子矩形个数。
现在 colazcy 把他还未完成的铺面给了你,希望你告诉他:如果他等概率随机地把剩下没有决定的元素填成 Drag / Click,最终铺面简单度的期望是多少。不难观察到答案总是一个有理数,你只需要输出这个答案对 取模的结果。如果你不知道如何将一个有理数对质数取模,可以参考 有理数取模。
输入格式
第一行两个正整数 ,分别代表矩阵的行数和列数。
接下来 行,第 行有一个长度为 的字符串,其第 位为 o
代表这个位置被确定为 Drag,为 x
代表其被确定为 Click,为 ?
表示这个位置还没有确定。
输出格式
一行一个整数,代表简单度的期望对 取模的结果。
2 2
oo
xo
5
2 2
oo
?o
7
3 4
o?o?
?xox
o?xo
499122189
提示
样例解释
样例一:整个铺面已经确定,而简单度 = 全是 Drag 的子矩阵数目 = 。
样例二:只有一个位置没有确定:当这个位置填 Drag 时,简单度为 ;当这个位置填 Click 时,简单度为 。则期望简单度为 。
数据范围
对于全部数据,有 。
Subtask 1 (15 pts):保证没有尚未确定的元素(即输入没有 ?
)。
Subtask 2 (15 pts):保证尚未确定的元素个数 。
Subtask 3 (30 pts):保证 。
Subtask 4 (40 pts):无特殊限制。