你正在一个 $h \times w$ 的网格上玩一种类似弹球的游戏。
游戏开始时,一个小球位于标记为 S 的特定单元格中心。网格中的每个单元格属于以下类型之一:
- 块状墙 (#):阻止小球进入该单元格,并将其反弹。
- 薄斜墙:左倾 () 或右倾 (/),根据其方向反射小球。
- 自由单元格 (.):小球可以在其中自由移动。
目标是让小球逃离网格。
开始时,你可以将小球向四个方向之一推动:上 (U)、下 (D)、左 (L) 或右 (R)。小球穿过一个自由单元格需要一秒钟,进入并离开一个包含薄斜墙的单元格需要一秒钟,从块状墙上反弹则不需要时间(块状墙占据了其所在单元格的全部空间)。
小球与所有墙壁(包括块状墙和斜墙)之间的碰撞都是完全弹性的,接触时会导致小球反射。
例如,小球进入一个自由单元格、穿过它、从相邻的块状墙反弹并穿回该自由单元格直到离开,总共需要两秒钟。
在小球移动过程中,你可以随时摧毁斜墙,将其永久变为自由单元格。你可以在游戏过程中的任何时刻摧毁多面斜墙。
确定小球是否能够逃离,如果可以,找出需要摧毁的斜墙的最小数量,以及每面被选中的墙需要被摧毁的精确时间。
输入格式
第一行包含两个整数 $h$ 和 $w$ ($1 \le h, w \le 1000$),表示网格的大小。
接下来的 $h$ 行描述了游戏开始时的网格。
其中第 $i$ 行包含 $w$ 个字符,描述了第 $i$ 行的单元格。点 (.) 表示自由单元格,井号 (#) 表示块状墙,() 或 (/) 表示薄斜墙,S 表示小球的起始位置(起始位置是一个自由单元格)。
保证所有描述网格的 $h \cdot w$ 个字符均属于集合 $\{., \#, \backslash, /, S\}$,且字符 S 恰好出现一次。
输出格式
如果能够让小球逃离网格,输出 YES。否则,输出 NO。
如果可以逃离,请输出以下额外信息。
第二行输出一个字符 $d \in \{U, D, L, R\}$,表示小球开始推动的方向。
第三行输出 $k$,表示需要摧毁的斜墙的最小数量。
接下来的 $k$ 行,每行输出三个整数 $t_i, r_i, c_i$,表示位于从上往下第 $r_i$ 行、从左往右第 $c_i$ 列的斜墙在小球开始移动 $t_i$ 秒后被摧毁。注意,相应的墙是在 $t_i$ 秒即将到达之前被摧毁的,这意味着如果小球本应在开始后恰好 $t_i$ 秒撞击该墙,那么该单元格此时表现为自由单元格。
操作必须按时间顺序打印(即对于所有 $1 \le i \le k - 1$,满足 $t_i \le t_{i+1}$)。同一面墙不能被多次摧毁(即如果 $i \neq j$,则 $(r_i, c_i) \neq (r_j, c_j)$)。对于所有 $1 \le i \le k$,初始时在 $(r_i, c_i)$ 处必须存在一面斜墙。
所有 $t_i$ 必须满足 $0 \le t_i \le 10^7$。可以证明,如果存在解,则一定存在一个所有 $t_i$ 均不超过 $10^7$ 的解。
样例
输入 1
4 6 #\###. #./S## #\\..# ######
输出 1
YES L 2 7 3 3 8 1 2
说明 1
需要摧毁的墙的最少数量为 2。我们描述样例输出中给出的解的相关时刻。
- 在时间 $t = 0$ 时,小球处于初始位置并被向左推动。
- 在时间 $t = 4.5$ 时,小球撞击一面块状墙并反弹。
- 在 $t = 7$ 之前,位置 $(3, 3)$ 处的墙被摧毁。
- 在 $t = 8$ 之前,位置 $(1, 2)$ 处的墙被摧毁。
- 在时间 $t = 10.5$ 时,小球最终逃离了网格。
输入 2
3 3 ### .S. ###
输出 2
YES R 0
说明 2
你只需将小球向左或向右推动,小球最终就会逃离网格。