罗伯特
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

滑滑蛋有一个机器人和一张 n*m 的地图,从上到下为 1-n 行,从左到右为 1-m 列,机器人有四个朝向,分别是上下左右。每一秒机器人会向它所朝的方向移动一格,但移出地图边界后会立刻销毁。机器人初始位置在左上角 (1,1),方向朝右。

地图上有一些标志,当机器人在该位置上时能改变机器人的朝向。地图上还有 k 对传送门,传送门由两个位置组成,当机器人走到传送门的一个位置时,会被立即传送到对应的另一个位置(不消耗时间,且传送后该传送门有 1 秒的冷却时间),传送后机器人的朝向不变。此外地图上还有一些陷阱,机器人移动到该位置时会立刻销毁。

滑滑蛋手里有 p 个未放置标志(放置时可选“URLD”四个方向之一,且标志只能放在空地上)。滑滑蛋想知道是否有一种放置标志的方法(手里的标志不必全部放置),使得放置后机器人才开始移动,且能从左上角 (1,1) 走到右下角 (n,m)。如果可以到达,输出到达的最短时间。

输入描述:

第一行输入四个数 nmkp

接下来k行,每行输出四个整数,x_1,y_1,x_2,y_2,表示该传送门对的两个位置(x_1,y_1)(x_2,y_2),保证(x_1,y_1)不等于 (x_2,y_2) 且任意位置只存在一个传送门。

接下来n行,每行输入一个长度为m的字符串,第i行的j个字符表示地图位置(i,j),若该位置为'.'表示该位置为空地,若该位置为'L','U','R','D',表示该位置存在标志,且当机器人走到该位置上时,分别能使机器人朝向变成左,上,右,下。若该位置为'#',表示该位置为陷阱。若该位置为'@',表示该位置为k对传送门的其中一个位置。

n \le 100,m\le 100,k\le 50p \le 50

输出描述:

若可以到达,输出一行"YES",第二行输出最短到达时间。

若不能到达,输出一行"NO"。
示例1

输入

复制
3 5 2 2
1 2 2 3
2 5 3 2
.@###
.#@.@
.@...

输出

复制
YES
4

说明

一种可能的放置方法

.@###

.#@D@

.@.R.