公平对局
题号:NC288163
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 1024 M,其他语言2048 M
64bit IO Format: %lld

题目描述

\hspace{15pt}某日,Askalana 来找小红下棋,准备验证刚学到的全新战术,Askalana执白,志在塞满小红的棋盖。
\hspace{15pt}对于给定的 nn 列的棋盘,一共有 n \times n 个位置可以落子。我们使用 (i,j) 表示棋盘中从上往下数第 i 行和从左往右数第 j 列的单元格,使用 s_{i,j} 表示这个单元格中现在的状态,状态有且仅有三种:
\hspace{23pt}\bullet\,s_{i,j}=\texttt{`*'},表示第 i 行第 j 列的格子内已经落了一枚白子;
\hspace{23pt}\bullet\,s_{i,j}=\texttt{`\#'},表示落了黑子;
\hspace{23pt}\bullet\,s_{i,j}=\texttt{`.'},表示格子中没有落子。
\hspace{15pt}每一个格子至多可以落一枚子。

\hspace{15pt}现在,你可以选择任意一个空的格子落一枚黑子,求解,在最优策略下,这一操作最多可以吃掉多少枚白子。
\hspace{15pt}保证初始给出的局面是稳定的,双方均不能吃子,且一定存在可落子的位置。

\hspace{15pt}如果在一方行动后,对方的一枚或多枚棋子组成的连通块被异色子或棋盘边界包围,则视这些子为死子,可以被一次性吃掉。为了准确的定义,我们有如下若干定义:
\hspace{23pt}\bullet\,|x-x'|+|y-y'|=1 时,格子 (x,y)(x',y') 被认为是相邻的;
\hspace{23pt}\bullet\,“白子极大连通块”为若干白子连接形成的区域,它们所在的格子相邻;当这片区域不能再添加更多的相邻白子时,称之达到极大;
\hspace{23pt}\bullet\,“白子极大连通块”的边界棋子为,与黑子、空点或棋盘边界相邻的棋子;
\hspace{15pt}最终,定义吃掉白子为:对于任意一个“白子极大连通块”,如果它所有的边界棋子均不与空点相邻,则视这些白子为死子。整个连通块内的白子均会被吃掉。
\hspace{15pt}吃掉黑子的定义与之类似,此处不再重复。

输入描述:

\hspace{15pt}第一行输入一个正整数 n \left(3 \leqq n \leqq 10^3\right) 代表棋盘边长。 
\hspace{15pt}此后 n 行,第 i 行输入一个长度为 n、仅由字符 \texttt{`.'}\texttt{`*'}\texttt{`\#'} 构成的字符串 s_i,代表棋盘中第 i 行的初始状态。

\hspace{15pt}除此之外,保证初始棋盘稳定。

输出描述:

\hspace{15pt}输出一个整数,代表在最优策略下,放置一枚黑子最多可以吃掉的白子个数。
示例1

输入

复制
3
.#.
#*.
.#.

输出

复制
1

说明

\hspace{15pt}在这个样例中,将棋子下在第二行第三列的位置(从 1 开始计数),可以吃掉唯一的一枚白子。
示例2

输入

复制
3
*.#
..*
#**

输出

复制
3

说明

\hspace{15pt}在这个样例中,将棋子下在第二行第二列的位置,可以吃掉右下的三枚白子,此为最优方案。