P12300 [ICPC 2023 WF] 倾斜方块

题目描述

你在阁楼上的一个旧玩具箱里发现了一个奇怪的玩具。这个玩具是一个由 $h \times w$ 个正方形单元格组成的长方形网格板。如图 F.1 所示,网格中的一些单元格上放置了一块彩色方块。 ![](https://cdn.luogu.com.cn/upload/image_hosting/wwiv0grk.png) 图 F.1. 样例 1 中初始的彩色方块排布 你还不确定这个玩具的确切目标是什么,但你已经开始研究重新排列方块的可能方法。可以通过将网格向左、向右、向着你或远离你的四个方向之一倾斜来实现让这些方块重排。倾斜会使所有方块向相应的方向滑动,直到被边界或其他方块挡住为止。给定一个起始和目标的方块排布,判断是否存在某种倾斜序列能将前者转化为后者。图 F.2 展示了样例 1 中所示玩具的倾斜过程。 ![](https://cdn.luogu.com.cn/upload/image_hosting/6eusiqk7.png) 图 F.2. 样例 1 的解

输入格式

第一行输入包含两个整数 $h$ 和 $w$($1 \le h, w \le 500$),分别代表网格的高度和宽度。随后的 $h$ 行给出了从第一行到最后一行的初始排布。每一行都包含一个长度为 $w$ 的字符串,从左到右描述该行的单元格。如果单元格是空的,对应的字符就是一个点(`.`)。如果有一个方块,则给出该方块的颜色,用小写字母(`a-z`)表示。不同的字母代表不同的颜色,相同颜色的方块无法区分。 在初始排布之后是一个空行,然后是对目标排布的描述,由 $h$ 行组成,格式与初始排布相同。

输出格式

如果存在将初始排布转换为目标排布的倾斜序列,则输出 `yes`,否则输出 `no`。