#joi2015yoe. [joi2015yo_e]砂の城 (Sandcastle)

[joi2015yo_e]砂の城 (Sandcastle)

问题

JOI 君和他的家人一起来海边游泳。JOI 君游了很长时间后累了,然后去沙滩上堆沙子玩。在玩沙子一段时间后,JOI 君把城堡放下,又返回海里游泳。

JOI 君建造的城堡位于沙滩的一个矩形区域内。这个矩形区域被划分为网格状的东西南北四个方向。每个方格要么是JOI君建造的城堡的一部分(以下称为“城堡方格”),要么是空地(以下称为“空地方格”)。每个城堡方格都有一个称为“强度”的整数,取值范围是1到9。矩形区域的边缘部分,即与外侧相接的方格不属于城堡方格。

随着时间的推移,潮水开始涌入矩形区域,波浪也开始冲击。每当波浪冲击一次,满足以下条件的城堡方格将全部坍塌,并变成空地方格:

条件:周围的8个方格(东西南北以及东北、西北、东南、西南方向相邻的方格)中的空地方格数量大于或等于该方格的强度值。当波浪退去后,很快下一次波浪就会冲击而来。

当波浪冲击了足够多的次数后,城堡将完全坍塌或只剩下坚固的部分,这样即使波浪冲击也不会有任何城堡方格坍塌。请计算出有多少次波浪会冲击并导致至少一个城堡方格坍塌。


输入

输入由1 + H行组成。

第一行包含两个整数H和W(2 ≤ H ≤ 1000,2 ≤ W ≤ 1000),用空格分隔开。它表示矩形区域被划分为H行W列的H×W个方格。

接下来的H行,每行包含W个字符,描述波浪冲击之前的矩形区域的状态。第i行第j个字符(1 ≤ i ≤ H,1 ≤ j ≤ W)表示从矩形区域的北侧开始的第i行,从西向东的第j列的方格是否为空地。如果是空地方格,则为"."(句点)。如果是城堡方格,则为1、2、...、9中的某个数字,表示该方格的强度。

矩形区域的边缘部分全部是空地方格。即在所有输入中,第一行和第H行的字符,以及每行的第一和最后一个字符都是"."。

在给定的输入数据中,输入样例1满足H ≤ 50,W ≤ 50。


输出

输出一个整数,表示波浪冲击并导致至少一个城堡方格坍塌的次数。


示例 1

输入示例

5 6
......
.939..
.3428.
.9393.
......

输出示例

3

在示例1中,第一次波浪冲击时,所有强度为3的城堡方格都坍塌,矩形区域变为:

......
.9.9..
..428.
.9.9..
......

第二次波浪冲击时,强度为2的城堡方格坍塌,矩形区域变为:

......
.9.9..
..4.8.
.9.9..
......

第三次波浪冲击时,强度为4的城堡方格坍塌,矩形区域变为:

......
.9.9..
....8.
.9.9..
......

之后的波浪不会再坍塌任何城堡方格。因此,答案是3。


示例 2

输入示例

10 10
..........
.99999999.
.9.323239.
.91444449.
.91444449.
.91444449.
.91444449.
.91232329.
.99999999.
..........

输出示例

35