1334 : 在哈尔滨指路

时间限制Time Limit 1 Sec 内存限制Memory Limit 1024 MB 提交次数Submitted 308 Times 通过次数Solved 114 Times 特判评测Special Judge

题目描述Description

在指路的时候,一些地区的人更习惯按绝对方位指路,比如:「往南走到第二个路口,再往东走到第一个路口就到了。」然而由于哈尔滨城市路网规划十分复杂,很多街道并不是正方位朝向的,因此如果你按照绝对方位给长期生活在哈尔滨的人指路的话,他很可能因为不习惯找方位而弄不清你所指的位置。

在哈尔滨,人们更习惯使用相对方位来指路,比如指引同样的位置,哈尔滨人会首先让你朝向南,并告诉你:「沿路捡直(直行)走到第二个路口,左拐,再捡直走到第一个路口就到了。」

为了应对这种差异,你准备写一个程序,将按绝对方位的指路方式转化为哈尔滨人习惯的指路方式。当然,如果直接使用哈尔滨的地图的话就太复杂了,所以本题中你可以认为地图是一个无限大的网格形状。

输入格式Input

第一行一个整数 \(T\) (\(1 \le T \le 10^4\)),表示测试数据组数。

对于每组测试数据,第一行一个整数 \(n\) (\(1 \le n \le 10\)),表示指路指令的个数。

接下来 \(n\) 行,每行按照绝对位置描述一个指令,包含一个字符 \(d\) (\(d\in\{\texttt{N}, \texttt{S}, \texttt{W}, \texttt{E}\}\)) 和一个整数 \(x\) (\(1 \le x \le 10\)),表示「往 \(d\) 方位走到第 \(x\) 个路口」。其中 \(\texttt{N}\) 表示向北,\(\texttt{S}\) 表示向南,\(\texttt{W}\) 表示向西,\(\texttt{E}\) 表示向东。

保证相邻两个指令中 \(d\) 不相同且不相反(北与南互相相反,西与东互相相反)。

输出格式Output

对于每组数据,第一行输出一个整数 \(m\) (\(1 \le m \le 20\)) 和一个字符 \(f\) (\(f \in \{\texttt{N}, \texttt{S}, \texttt{W}, \texttt{E}\}\)),分别表示按哈尔滨人习惯的指路方式的指令条数和初始面向的方位,方位的含义同输入中描述。

接下来输出 \(m\) 行,每行首先输出一个字符 \(g \in \{\texttt{Z}, \texttt{L}, \texttt{R}\}\),其中 \(\texttt{Z}\) 表示直走,\(\texttt{L}\) 表示左转,\(\texttt{R}\) 表示右转。如果输出的字符为 \(\texttt{Z}\),此行还需输出一个整数 \(y\) (\(1 \le y \le 100\)) 表示直走到第 \(y\) 个路口。第一个输出的指令必须以 \(\texttt{Z}\) 开头,输出中相邻两个指令的字符 \(g\) 不能相同,并且 \(\texttt{L}\) 指令和 \(\texttt{R}\) 指令不能相邻。

本题中你无需最小化 \(m\),如果有多种方案可以到达同一目的地,输出任意一个均可。

样例Sample

出题Author

UESTC