Nerissa 拥有一块矩形的稻田,被划分为 $R \times C$ 个大小相同的小方格($R$ 行 $C$ 列)。每个方格要么是空地(可以用于任何目的),要么是已种植水稻的土地。
为了防止乌鸦或麻雀等鸟类破坏庄稼,Nerissa 决定在田里放置一些稻草人。每个稻草人只能放置在空地上。此外,为了防止其他人偷窃庄稼,稻草人的摆放必须是“神圣的”。如果一个摆放方案满足以下所有条件,则称其为神圣的:
- 每一行至少包含一个稻草人。
- 每相邻的两列至少包含一个稻草人。
现在 Nerissa 想知道,有多少种不同的神圣摆放方案?如果一个方案中某个方格放置了稻草人,而另一个方案中该方格没有放置稻草人,则这两个方案被视为不同。请帮助 Nerissa 计算这个数量。
输入格式
第一行包含两个整数:$R$ 和 $C$ ($1 \le R \le 14; 1 \le C \le 1000$),表示稻田的尺寸(行数和列数)。接下来的 $R$ 行给出了稻田的情况,每行包含一个长度为 $C$ 的字符串。每个方格用 '.' 表示空地,用 'v' 表示已种植水稻的土地。
输出格式
输出一行,包含一个整数,表示不同的神圣摆放方案数量。由于输出可能非常大,请将结果对 $1,000,000,007$ 取模。
样例
样例输入 1
2 2 v. ..
样例输出 1
3
样例输入 2
1 3 ...
样例输出 2
5
样例输入 3
2 3 vvv ...
样例输出 3
0
样例输入 4
3 3 ... .v. ...
样例输出 4
145
样例输入 5
2 4 .vv. .v.v
样例输出 5
5
说明
样例 2 的说明
对于第二个样例,以下是全部 5 种神圣摆放方案(稻草人用字符 '' 表示):
`**`*.* **. .** .*.
样例 3 的说明
注意,对于第三个样例,我们无法在第一行放置任何稻草人。由于神圣摆放方案要求每一行至少有一个稻草人,因此在这种情况下,不存在神圣摆放方案。
样例 5 的说明
对于第五个样例,以下是全部 5 种神圣摆放方案(稻草人用字符 '' 表示):
`vv vv vv.`*vv. .vv*
*v*v .v*v .v*v *v*v *v*v