bzoj#P2170. 画圈圈

画圈圈

题目描述

nnmm 列的点组成一个点阵。你通过用水平和竖直的线段连接一些相邻的点画若干闭合的回路,将所有的点连接起来,组成一个图形。

连的线被视为是内部和外部的界限。其中,有一些点(用 *# 表示)不用被连接,且用 * 表示的点在必须在图形内部,用 # 表示的点必须在图形外部。例如:(用 + 表示点,表示线, 表示图形内部)

+-+-+-+-+-+
|xxxxxxxxx|
+x+-+-+x﹡x+
|x|   |xxx|
+-+ # +x+-+
      |x|
+-+-+ +x+-+
|xxx| |xxx|
+-+-+ +-+-+

以及

+-+-+-+-+
|xxxxxxx|
+x+-+-+x+
|x|   |x|
+x+ # +x+
|x|   |x|
+x+-+-+x+
|xxxxxxx|
+-+-+-+-+
注意:这个点是在外部!

你要写一个程序来计算一共有多少种连线的方法。我们只关心它模一个大质数 123456791123456791 的余数。

输入格式

输入的第一行包含两个正整数,分别表示行数 nn 和列数 mm

接下来 nn 行,每行 mm 个字符表示点的情况(用 .*# 来表示三种点)。

输出格式

输出一个整数,表示总方法数模 123456791123456791 的余数。

样例输入

5 6
......
....*.
..#...
......
......

样例输出

117

数据范围与约定

50%50\% 的数据满足:总的方法数小于 2.2×1052.2\times 10^5

100%100\% 的数据满足:m12m\leq 12n20n\leq 20

题目来源

版权所有者:范浩强