#879. Go

    ID: 879 传统题 5000ms 512MiB 尝试: 4 已通过: 1 难度: 10 上传者: 标签>2700训练赛ICPC南京双连通分量分类讨论

Go

Go

题目描述

围棋是一种对抗游戏,目标是用己方棋子围住比对手更大的棋盘区域。围棋中的核心概念之一是“气”:与棋子所在连通块相邻、且没有棋子的交叉点。

若一枚黑棋或白棋在上、下、左、右四个方向上至少相邻一个气,或者它与同色的一枚活棋处于同一个连通块中,则称这枚棋子是活的。两个同色棋子若在上下或左右方向相邻,则称它们直接相连;若同色棋子 s1s_1sks_k 之间存在棋子序列 s1,s2,,sks_1,s_2,\ldots,s_k,使得相邻两枚棋子均同色且直接相连,则称它们位于同一个连通块中。

下图左侧的两枚白棋都没有气,被周围的黑棋提掉;右侧最右边的白棋同样不是活棋,即使最左边的黑棋也不是活棋。两幅图中未存活白棋的数量分别为 2211

围棋中棋子是否存活的示例

给定一个由 nn 条横线和 nn 条竖线组成的棋盘,部分交叉点上放有棋子。现在需要分别翻转每一枚棋子的颜色(黑变白、白变黑),并求出翻转后没有存活的白棋数量。

每次翻转都是独立的:翻转下一枚棋子之前,其他棋子都恢复为初始颜色。棋盘大小不一定是 19×1919\times 19,黑白棋子的数量也没有现实棋局中的限制。

将初始棋盘上的所有棋子按行号从上到下为第一关键字、列号从左到右为第二关键字排序。设棋子总数为 mm,翻转排序后第 ii 枚棋子时,没有存活的白棋数量为 aia_i。定义

E=i=1m(106+7)miai.E=\sum_{i=1}^{m}(10^6+7)^{m-i}a_i.

请输出 EE109+710^9+7 取模后的结果。注意,式中的底数 106+710^6+7 与模数 109+710^9+7 不同。

输入格式

输入包含多组测试数据。第一行包含一个整数 TT,表示测试数据组数。

对于每组测试数据,第一行包含一个整数 nn2n1032\le n\le 10^3),表示棋盘的边长。

接下来 nn 行,第 ii 行包含一个长度为 nn 的字符串。其中字符 x(ASCII 码 120120)表示黑棋,字符 o(ASCII 码 111111)表示白棋,字符 .(ASCII 码 4646)表示空交叉点。

保证所有测试数据的 nn 之和不超过 5×1035\times 10^3

输出格式

对于每组测试数据,输出一行一个整数,表示编码后的答案 EE109+710^9+7 取模的结果。

样例输入 1

3
2
.o
..
3
.x.
xoo
ox.
2
oo
oo

样例输出 1

0
870527216
485539347

样例解释

对于第二组测试数据,按 (1,2),(2,1),(2,2),(2,3),(3,1),(3,2)(1,2),(2,1),(2,2),(2,3),(3,1),(3,2) 的顺序依次翻转棋子时,没有存活的白棋数量分别为 1,0,1,2,0,01,0,1,2,0,0

对于第三组测试数据,棋盘上的所有棋子(无论黑白)都不是活棋。

数据范围

  • 1T25001\le T\le 2500
  • 2n1032\le n\le 10^3
  • 所有测试数据的 nn 之和不超过 5×1035\times 10^3
子任务编号 分值 特殊限制
1 20 n8n\le 8
2 80 无特殊限制