#CF1458C. 拉丁方
拉丁方
C. 拉丁方
每个测试的时间限制:2 秒
内存限制:512 兆字节
给定一个大小为 的方阵。矩阵的每一行和每一列都是 的一个排列。用 表示第 行第 列交叉处的元素,其中 。行从上到下编号为 ,列从左到右编号为 。
共有六种类型的操作:
- R:将所有列循环右移。形式化地,将每个 的值设为 。
- L:将所有列循环左移。形式化地,将每个 的值设为 。
- D:将所有行循环下移。形式化地,将每个 的值设为 。
- U:将所有行循环上移。形式化地,将每个 的值设为 。
- I:将每一行从左到右读出的排列替换为其逆排列。
- C:将每一列从上到下读出的排列替换为其逆排列。
一个排列 的逆排列是一个排列 ,使得对于每个 有 。
容易看出,经过任意操作序列后,矩阵的每一行和每一列仍然是 的一个排列。
给定初始矩阵的描述,你需要处理 个操作,并输出最终的矩阵。
输入
第一行包含一个整数 ()——测试用例的数量。接下来是 个测试用例的描述。
每个测试用例的第一行包含两个整数 和 (,)——矩阵的大小和操作的数量。
接下来的 行,每行包含 个由空格分隔的整数——矩阵 的描述()。
最后一行包含一个长度为 的字符串,按顺序描述操作,格式如上所述。
所有测试用例的 之和不超过 , 之和不超过 。
输出
对于每个测试用例,输出 行,每行 个整数——经过 次操作后的最终矩阵。
示例
输入
5
3 2
1 2 3
2 3 1
3 1 2
DR
3 2
1 2 3
2 3 1
3 1 2
LU
3 1
1 2 3
2 3 1
3 1 2
I
3 1
1 2 3
2 3 1
3 1 2
C
3 16
1 2 3
2 3 1
3 1 2
LDICRUCILDICRUCI
输出
2 3 1
3 1 2
1 2 3
3 1 2
1 2 3
2 3 1
1 2 3
3 1 2
2 3 1
1 3 2
2 1 3
3 2 1
2 3 1
3 1 2
1 2 3
注:示例答案之间的空行仅为了清晰,实际输出时不需要打印空行。