给定一个 $R$ 行 $C$ 列的棋盘,每个格子要么是干地('#'),要么是冰地('.')。 你可以在棋盘上向四个方向(北、南、东、西)移动。 在干地上,你可以随意行走或原地不动;然而,冰地非常滑。如果你站在格子 $(r, c)$ 并决定向某个方向移动,你将沿着该方向持续移动,直到到达干地或棋盘边界。
例如,考虑以下 6 行 7 列的棋盘:
#...... .#..... ..##... ..##... ....... .#.....
- 从 $(1, 3)$(第 1 行第 3 列)出发,如果你向南移动,你最终会停在 $(3, 3)$。
- 从 $(4, 4)$ 出发,如果你向北移动,你最终会停在 $(3, 4)$。
- 从 $(1, 1)$ 出发,如果你向东移动,你最终会停在 $(1, 7)$。
- 从 $(6, 5)$ 出发,如果你向西移动,你最终会停在 $(6, 2)$。
假设你的初始位置在 $(3, 7)$,移动序列依次为西、西、西、南、东、北、西、西。那么你的位置变化为 $(3, 7) \to (3, 4) \to (3, 3) \to (3, 1) \to (6, 1) \to (6, 2) \to (2, 2) \to (2, 1) \to (2, 1)$,总共访问了 8 个不同的格子。注意格子 $(2, 1)$ 被访问了两次。仅经过的格子不被视为已访问,例如在上述例子中,如果你从 $(3, 1)$ 向南移动,你会经过 $(4, 1)$ 和 $(5, 1)$ 并到达 $(6, 1)$;因此,$(4, 1)$ 和 $(5, 1)$ 不被视为从该次移动中访问,只有 $(3, 1)$ 和 $(6, 1)$ 被视为已访问。
你可以将任意冰地改为干地,你的目标是确保无论初始位置在哪里,你总能访问棋盘上的所有格子;换句话说,你不知道自己的初始位置,但给定棋盘后,你要确保能够达成目标。为了确保目标能够实现,你需要改变的最少格子数量是多少?
输入格式
输入的第一行包含两个整数:$R$ 和 $C$ ($1 \le R, C \le 500$),分别表示棋盘的行数和列数。接下来的 $R$ 行,每行包含 $C$ 个字符,表示给定的棋盘。每个字符要么是表示干地的 '#',要么是表示冰地的 '.'。
输出格式
输出一行,包含一个整数,表示为了确保无论初始位置在哪里都能访问棋盘上所有格子,你需要改变的最少格子数量。
样例
输入 1
4 4 .... .### ##.. ###.
输出 1
1
说明 1
我们只需要改变格子 $(3, 3)$。
.... .### ###. ###.
设 'N' 为北,'S' 为南,'W' 为西,'E' 为东。
- 如果你从 $(1, 1)$ 出发,移动序列 “SSENNWENSESSEWNENWNE” 将访问所有格子。对应的位置序列为:$(1, 1) \to (3, 1) \to (4, 1) \to (4, 2) \to (3, 2) \to (2, 2) \to (2, 1) \to (2, 2) \to (1, 2) \to (2, 2) \to (2, 3) \to (3, 3) \to (4, 3) \to (4, 4) \to (4, 3) \to (3, 3) \to (3, 4) \to (2, 4) \to (2, 3) \to (1, 3) \to (1, 4)$。
- 如果你从 $(1, 2)$ 出发,移动序列 “W” 加上上述第一个例子中的移动序列将访问所有格子。对应的位置序列为:$(1, 2) \to (1, 1) \to \dots$
- 如果你从 $(1, 3)$ 出发,移动序列 “W” 加上上述第一个例子中的移动序列将访问所有格子。对应的位置序列为:$(1, 3) \to (1, 1) \to \dots$
- 如果你从 $(4, 3)$ 出发,移动序列 “NNNW” 加上上述第一个例子中的移动序列将访问所有格子。对应的位置序列为:$(4, 3) \to (3, 3) \to (2, 3) \to (1, 3) \to (1, 1) \to \dots$
- 如果你从 $(4, 4)$ 出发,移动序列 “NNW” 加上上述第一个例子中的移动序列将访问所有格子。对应的位置序列为:$(4, 4) \to (2, 4) \to (1, 4) \to (1, 1) \to \dots$