许多谜题变体往往比其对应的原始类型更难。但矛盾的是,正如有一个单词在增加两个字母后反而变短了一样,也存在一种变体能让任何类型变得更简单。 — Freddie Hand
Grammy 是一位谜题大师。今天,她正在玩一种名为“Scrabble”谜题的变体——“Easy as Scrabble”。 该谜题由一个 $n \times m$ 的网格组成。每个单元格应填入一个大写字母,或者留空。 谜题外围有一些线索。外围线索表示从该方向看去的第一个非空单元格中的字母。此外,某些单元格可能包含“x”标记,表示该单元格必须为空。
例如,左侧的图片展示了一个未解的谜题,右侧的图片展示了该谜题的一个解。
Grammy 想要找到该谜题的一个解。请帮助 Grammy 找到一个解,或者报告不存在解。
输入格式
第一行包含两个整数 $n, m$ ($1 \le n, m \le 1000$),表示网格的行数和列数。 下一行包含一个点(“.”),后跟 $m$ 个字符 $U_i$,表示网格上方的线索,最后再跟一个点(“.”)。 接下来的 $n$ 行,每行包含一个线索 $L_i$,后跟 $m$ 个字符 $c_{ij}$,再跟一个线索 $R_i$,分别表示网格左侧的线索、网格单元格以及网格右侧的线索。 下一行包含一个点(“.”),后跟 $m$ 个字符 $D_i$,表示网格下方的线索,最后再跟一个点(“.”)。 每个线索 $U_i, L_i, R_i, D_i$ 要么是一个大写英文字母,要么是一个点(“.”)。每个中心单元格 $c_{ij}$ 要么是“x”,要么是点(“.”)。 输入中的所有点表示相应位置为空。
输出格式
如果不存在解,输出一行“NO”。 否则,第一行输出“YES”,然后输出 $n$ 行,每行包含 $m$ 个字符,表示谜题的一个解。每个空单元格应表示为一个点。如果存在多个解,输出任意一个即可。 请注意,你需要将中心单元格中给定的“x”字符替换为点。 另请注意,你不应输出线索单元格。
样例
输入 1
5 5 .CBA... ....x.. ..x...C A.....B B..x..A C...... .......
输出 1
YES CBA.. A.B.C .A.CB BC.A. ..CBA
输入 2
1 2 .... Nx.. ..O.
输出 2
NO