#12451. C - Grid Repainting 2 / 网格重新上色 2

C - Grid Repainting 2 / 网格重新上色 2

题目名称

C - Grid Repainting 2 / 网格重新上色 2


题目描述

有一个由 H 行、W 列组成的网格画布。 网格中第 i 行、第 j 列的格子记为 (i, j)

一开始,​所有格子都是白色​。 现在给出一个目标图案,用字符表示:

  • s[i][j] = '#',表示目标状态下格子 (i, j) 应为 ​黑色​;
  • s[i][j] = '.',表示目标状态下格子 (i, j) 应为 ​白色​。

画家 square1001 能进行的操作非常有限,他 只能反复进行如下操作(可以是 0 次):

选择两个在网格中**相邻(上下或左右相邻)**的格子, 并将这两个格子都涂成黑色。

如果某个格子本来已经是黑色,再次被涂黑也没有影响。 他 不能 单独涂黑一个格子,也不能把黑色重新涂回白色。

请你判断: 是否存在一种操作序列,使得最终画布与给定的目标图案 ​完全一致​?

  • 若可以做到,输出 Yes
  • 否则输出 No

输入格式

从标准输入读取数据。

  • 第一行包含两个整数 HW,表示网格的行数和列数。
  • 接下来 H 行,每行一个长度为 W 的字符串,表示网格的目标图案。 第 i 行的字符串记为 s[i],其中:
    • s[i][j] = '#' 表示该位置目标为黑色;
    • s[i][j] = '.' 表示该位置目标为白色。

输出格式

输出一行:

  • 若 square1001 能够通过若干次操作得到目标图案,输出:
Yes
  • 否则输出:
No

大小写需与上面完全一致。


数据范围

  • 1 ≤ H ≤ 50
  • 1 ≤ W ≤ 50
  • 对于所有的 1 ≤ i ≤ H, 1 ≤ j ≤ Ws[i][j] 仅为 '#''.'

样例一

输入

3 3
.#.
###
.#.

输出

Yes

image

(可以通过多次选择相邻格子、成对涂黑,实现该图案。)


样例二

输入

5 5
#.#.#
.#.#.
#.#.#
.#.#.
#.#.#

输出

No

样例三

输入

11 11
...#####...
.##.....##.
#..##.##..#
#..##.##..#
#.........#
#...###...#
.#########.
.#.#.#.#.#.
##.#.#.#.##
..##.#.##..
.##..#..##.

输出

Yes

每个黑格 '#' 至少要有一个上下左右方向上的黑格邻居,否则一定不可能实现。