考虑一个由符号 ‘.’ 和 ‘’ 组成的 $n \times m$ 网格。一个“房屋”是指由 ‘’ 单元格组成的连通分量。如果两个单元格共享一条公共边,则它们是连通的。围栏是一条不自触、不自交的闭合折线,由对应于单元格边的线段组成。
你需要建造一个满足以下三个属性的围栏:
- 围栏不能与网格边界有公共点。
- 围栏不能与围栏外部的房屋有公共点。
- 围栏的每一段都必须位于任何房屋之外,换句话说,每一段的至少一侧必须是 ‘.’。
计算可以通过上述围栏围住的房屋的最大数量。如果无法建造围栏,则该数量为 0。
输入格式
第一行包含两个整数 $n$ 和 $m$,表示网格的尺寸 ($1 \le n, m \le 10^3$)。 接下来的 $n$ 行,每行包含一个长度为 $m$ 的字符串,由字符 ‘.’ 和 ‘*’ 组成。这些行共同描述了网格。
输出格式
输出一个整数:可以通过满足上述三个属性的围栏围住的房屋的最大数量。
样例
输入格式 1
8 8 ........ ...**..* .....**. ..*....* .*.*.*** .*.*.... ..**.... ........
输出格式 1
3
输入格式 2
3 4 .*.. **** ..*.
输出格式 2
0
说明
图中中心附近的绿色折线围住了三个房屋,这是建造围栏的最优方式之一。顶部附近的红色折线是一个不合格的围栏,因为它接触到了围栏外部的一个房屋。
这两张图片展示了构造围栏的无效方式。左图展示了围栏接触外部边界的情况。右图展示了围栏穿过房屋的情况,这是不可接受的。