考虑一个黑白图像,其中每个像素的值为 0 或 1。定义图像的一个区域为一组具有相同值且相互连通的像素。具体来说,对于区域中的任意两个像素,它们之间存在一条仅经过相同值像素的路径(路径仅能向上、下、左、右移动)。
你希望图像中的每个区域周围都有一个完整的边界。你可以选择对某些区域绘制边界;当你这样做时,你将围绕整个区域绘制一个边界,包括任何内部的“孔洞”(完全包含在该区域内的区域)。如果两个区域相邻,那么你可以通过围绕其中一个、另一个或两者同时绘制边界来提供它们之间的边界。为了确保每个区域都有边界,你需要围绕绘制边界的区域的最小数量是多少?
考虑以下示例:
- 在第一个例子中,最小数量是 3。因为它们位于边缘,除了将三个区域全部围起来之外别无选择。
- 在第二个例子中,最小数量是 1。围绕 0 区域绘制边界同时也为 1 区域提供了边界。
- 在第三个例子中,答案是 8。围绕所有位于边缘的区域绘制边界,同时也为中心区域提供了边界。
输入格式
输入的第一行包含两个整数 $n$ 和 $m$ ($1 \le n, m \le 100$),其中 $n$ 是图像的行数,$m$ 是列数。
接下来的 $n$ 行,每行包含一个长度为 $m$ 的字符串,仅由字符 ‘0’ 和 ‘1’ 组成。这就是图像。
输出格式
输出一个整数,表示为了确保每个区域都有边界,你必须围绕绘制边界的区域的最小数量。
样例
输入 1
3 3 000 111 000
输出 1
3
输入 2
3 3 000 010 000
输出 2
1
输入 3
3 3 010 101 010
输出 3
8