2170 - 画圈圈

有N行M列的点组成一个点阵。你通过用水平和竖直的线段连接一些相邻的点画若干闭合的回路,将所有的点连接起来,组成一个图形。连的线被视为是内部和外部的界限。其中,有一些点(用和#表示)不用被连接,且用表示的点在必须在图形内部,用#表示的点必须在图形外部。例如:(用+表示点,-和|表示线,x表示图形内部)+-+-+-+-+-+ |xxxxxxxxx| +x+-+-+x﹡x+ |x|   |xxx|+-+ # +x+-+       |x|+-+-+ +x+-+ |xxx| |xxx|+-+-+ +-+-+以及+-+-+-+-+|xxxxxxx|+x+-+-+x+|x|   |x|+x+ # +x+   注意:这个点是在外部!|x|   |x|+x+-+-+x+|xxxxxxx|+-+-+-+-+你要写一个程序来计算一共有多少种连线的方法。我们只关心它模一个大质数123456791的余数。

Input

输入的第一行包含两个正整数,分别表示行数N和列数M。接下来N行,每行M个字符表示点的情况(用.*#来表示三种点)。 50%的数据满足:总的方法数小于220000 100%的数据满足: M≤12,N≤20

Output

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

Examples

Input

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

Output

117
Time Limit 1 second
Memory Limit 128 MB
Stats
上一题 下一题