AT_abc453_d [ABC453D] Go Straight

题目描述

有一个由 $H$ 行 $\times$ $W$ 列组成的网格。高桥在网格中上下左右移动。 从上往下第 $i$ 行,从左往右第 $j$ 列 $(1\leq i\leq H, 1\leq j\leq W)$ 的单元格的状态用字符 $S_{i,j}$ 表示。 $S_{i,j}$ 是`#`、`.`、`o`、`x`、`S`、`G`中的一个。 - 如果 $S_{i,j}=$ `#`:无法进入此单元格。 - 如果 $S_{i,j}=$ `.`:此单元格可以自由进出。也就是说,进入这个单元格后,高桥可以向上、向下、向左或向右移动到任何相邻的单元格(如果存在的话)。 - 如果 $S_{i,j}=$ `o`:在这一格中,高桥的移动方向必须与之前的移动方向相同。也就是说,在进入这一格后,他必须在不改变方向的情况下移动到下一格。 - 如果 $S_{i,j}=$ `x`:在这一格中,高桥不能沿与前一步相同的方向移动。也就是说,在进入这一格后,他必须改变方向移动到下一格。转 $180$ 度回到上一格被视为改变方向。 - 如果 $S_{i,j}=$ `S`:此格是高桥的起始位置。此格可以自由进出。 - 如果 $S_{i,j}=$ `G`:此格是高桥的目的地。此格可以自由进出。 刚好有一个 $(i,j)$ $(1\leq i\leq H, 1\leq j\leq W)$ 满足 $S_{i,j}=$ `S`,刚好有一个 $(i,j)$ $(1\leq i\leq H, 1\leq j\leq W)$ 满足 $S_{i,j}=$ `G`。 高桥想要通过重复地从起始位置向上、下、左或右移动到相邻的单元格来到达目的地。 请判断这是否可行,如果可行,请输出一个在相邻单元格之间最多有 $5\times 10^6$ 次移动的有效移动序列。 可以证明,如果在问题的条件下存在一个有效的移动序列,那么就存在一个最多有 $5\times 10^6$ 次移动的序列。 只要移动次数最多为 $5\times 10^6$ ,就没有必要最小化移动次数。

输入格式

输入内容由标准输入法提供,格式如下 >$H$ $W$ $S_{1,1} S_{1,2} \ldots S_{1,W}$ $S_{2,1} S_{2,2} \ldots S_{2,W}$ $\vdots$ $S_{H,1} S_{H,2} \ldots S_{H,W}$

输出格式

如果无法在满足条件的情况下到达目的地,则在第一行输出 `No`,在第二行不输出任何内容。 如果可以在满足条件的情况下到达目的地,则在第一行输出 `Yes`。 在第二行中,输出一个字符串 $T$ 代表一连串的移动。 $T$ 必须满足以下所有条件。 - $T$ 的长度 $\lvert T\rvert$ 介于 $1$ 和 $5\times 10^6$ 之间(包括首尾)。 - $T$ 中的每个字符都是 `U`、`D`、`L`、`R` 中的一个。 - $T$ 的第 $i$ 个字符是 `U`、`D`、`L`、`R`,这意味着在出发后的第 $i$ 次移动中,高桥分别移动到相邻单元格的上方、下方、左侧或右侧。 - 对于 $1\leq i\leq \lvert T\rvert$ ,高桥在第 $i$ 步之后不在网格之外。 - 在移动过程中,每个单元格的条件都没有被违反。 - 在第 $\lvert T\rvert$ 次移动之后,高桥位于目的地单元格。只要满足这个条件,他就可以在 $\lvert T\rvert$ 步之前通过目的单元格。

说明/提示

#### 样例解释 #1 让单元格 $(i,j)$ 表示从上往下第 $i$ 行、从左往右第 $j$ 列的单元格。 根据样例输出,路径为:$(2,2)$ $\to$ $(3,2)$ $\to$ $(3,3)$ $\to$ $(3,2)$ $\to$ $(2,3)$ $\to$ $(1,3)$ $\to$ $(2,3)$ $\to$ $(3,3)$ $\to$ $(3,4)$ $\to$ $(3,5)$,到达目的地。 其他解决方案,如 `DRUURLRRDD` 也被接受。另一方面,由于高桥无法直接穿过 $(3,3)$ 单元格,因此 `DRRR` 等解法不被接受。 #### 样例解释 #3 不可能在满足条件的情况下到达目的地。 #### 限制因素 - $1 \leq H,W\leq 1000$ - $S_{i,j}$ 是 `#`, `.`, `o`, `x`, `S`, `G` 中的一个 - 正好有一个 $(i,j)$ 满足 $S_{i,j}=$ `S`,正好有一个满足 $S_{i,j}=$ `G` - $H$ 和 $W$ 是整数