Robotic Encryption
由于怀疑存在作弊者,一位偏执的题目出题人开始在将所有消息发送给评审团其他成员之前对其进行加密。他没有使用任何标准的加密方式,因为他认为那些都是试图从内部摧毁 IDI Open 的巨大阴谋网络的一部分。相反,他的加密基于这样一个事实:作弊者很可能是最糟糕的程序员。解密需要一定的编程技巧,因此应该是安全的。
除了加密的消息外,他还发送了解密方法的说明。现在唯一的问题是,并非所有评审团成员都能实现解密。这就是我们需要你帮助的地方。你需要通过编写一个程序来完成这项任务,从而帮助我们解密这些消息。
解密过程是通过模拟机器人在网格上的移动来完成的。机器人最初放置在网格的西北角,面向南方。机器人很简单,只接受三种不同的指令:
- L:使机器人向左转 $90^\circ$。
- R:使机器人向右转 $90^\circ$。
- F:使机器人向前移动一格。如果向前移动会导致机器人掉出网格,机器人则原地进行 $180^\circ$ 转向,而不移动。
给机器人的指令以一系列指令集(commandsets)的形式给出。指令集是一个指令字符串,可能包含循环。循环的形式为 (commandset)number,其中 number 是括号内指令集执行的次数。更长的指令序列可以以这种方式递归构建。形式化定义如下:
$$commandset ::= instruction+$$ $$instruction ::= command | loop$$ $$loop ::= "(" commandset ")" number$$ $$command ::= R | L | F$$ $$number ::= 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9$$
解密后的文本是通过连接机器人执行每一行指令后所处网格位置上的字符而得到的字符串。
输入格式
输入的第一行包含 $T$,即测试用例的数量。每个测试用例以一行包含 $W$ 和 $H$ 开始,由空格分隔,描述网格的尺寸。接下来是 $H$ 行,每行包含 $W$ 个字符,构成网格。之后是一行包含 $N$ 的内容,即指令行的数量,随后是机器人将要执行的 $N$ 行指令。
输出格式
每个测试用例输出一行,包含解密后的文本。
数据范围
- $0 < T \le 100$
- $0 < W \le 50$
- $0 < H \le 50$
- $0 < N \le 20$
- 指令行长度不超过 50 个字符,并遵循题目中给出的语法。
- 机器人网格中不会出现 ASCII 值小于 32 或大于 126 的字符。
样例
输入格式 1
1 6 7 012345 6789AB CDEFGH IJKLMN OPQRST UVWXYZ _! .,& 12 FFL(F)5 (F)4 (LF)2 (L(R)6L)9 RFRFFF (L(F)2)2 LF FLFF FFFF LF FLFF L(F)4
输出格式 1
HELLO WORLD!