#codefestivalchinag. [code_festival_china_g]Ammunition Dumps

[code_festival_china_g]Ammunition Dumps

问题

有一个大小为R×CR \times C的二维网格。其中的某些单元格上有许多爆炸品仓库。

当一个仓库着火时,它最终会在未来的某个时刻爆炸。当仓库爆炸时,它会以一个++形状的火焰在四个方向上扩展。火焰扩展直到达到其他仓库。火焰不会达到那些仓库后面的单元格。

暴露在火焰中的仓库可能会着火,也可能不会着火。一旦一个仓库暴露在火焰中,但并没有着火,那么它可以再次暴露在另一次火焰中。在这种情况下,与之前一样,仓库可能会着火,也可能不会着火。

已经爆炸过的仓库不会再着火,但仍然阻止火焰的传播。

首先,你点燃了一个爆炸品仓库。最后,所有的仓库都爆炸了。

在这场灾难中,没有两个仓库同时爆炸。(有些仓库可能同时着火。)

计算使所有仓库都爆炸的可能方式的数量。由于答案可能很大,将其打印为除以数1000000009(109+9)1000000009(10^9+9)的余数。

爆炸的方式是一组仓库对。每对仓库包括一个着火的仓库和一个通过爆炸点燃前一个仓库的仓库。当两种爆炸方式至少有一对不同的仓库时,它们是不同的。


输入

输入按照以下格式给出。

RR CC s(1,1)s_{(1,1)}s(1,2)s_{(1,2)} .. s(1,C)s_{(1,C)} s(2,1)s_{(2,1)}s(2,2)s_{(2,2)} .. s(2,C)s_{(2,C)} : s(R,1)s_{(R,1)}s(R,2)s_{(R,2)} .. s(R,C)s_{(R,C)} aa bb

  • 第一行给出两个整数R,C(1R,C16)R,C (1 \leq R,C \leq 16),用空格分隔,表示网格的行数和列数。
  • 接下来的RR行是仓库的位置。每行包含一个长度为CC的字符串。每个字符串由.W组成。第ii(1iR)(1 \leq i \leq R)的第jj(1jC)(1 \leq j \leq C)字符表示单元格(i,j)(i,j)。如果字符是.,则单元格(i,j)(i,j)是空单元格。如果字符是W,则单元格(i,j)(i,j)上有一个仓库。
  • 在下一行,用空格分隔,给出两个整数a,b(1aR,1bC)a,b (1 \leq a \leq R,1 \leq b \leq C)(a,b)(a,b)是你首先点燃火焰的仓库的位置。保证该单元格上有一个仓库。
  • 确保至少有11个仓库存在。

输出

输出一行,包含将所有仓库爆炸的方式的数量,模10000000091000000009。请确保在输出末尾插入一个换行符。


输入示例1


3 4
W.W.
....
W.W.
1 1

输出示例1


4

例如,下面是一种爆炸方式。除了这种方式之外,还有44种爆炸方式。

在此方式中,位于(1,3)(1,3)(3,1)(3,1)的仓库是从(1,1)(1,1)处的仓库着火的,而位于(3,3)(3,3)的仓库着火是从(3,1)(3,1)处的仓库着火的


输入示例2


3 4
W.W.
.W.W
W.W.
2 2

输出示例2


0

在这种情况下,不是所有的仓库都能爆炸。


输入示例3


1 1
W
1 1

输出示例3


1

输入示例4


16 16
WWWWWWWWWWWWWWWW
WWWWWWWWWWWWWWWW
WWWWWWWWWWWWWWWW
WWWWWWWWWWWWWWWW
WWWWWWWWWWWWWWWW
WWWWWWWWWWWWWWWW
WWWWWWWWWWWWWWWW
WWWWWWWWWWWWWWWW
WWWWWWWWWWWWWWWW
WWWWWWWWWWWWWWWW
WWWWWWWWWWWWWWWW
WWWWWWWWWWWWWWWW
WWWWWWWWWWWWWWWW
WWWWWWWWWWWWWWWW
WWWWWWWWWWWWWWWW
WWWWWWWWWWWWWWWW
1 1

输出示例4


242986351

不要忘记输出数除以1,000,000,0091,000,000,009的余数。