你有一个位于东西向无限长高速公路上的机器人,它需要运送一个蛋糕。高速公路上的每一英里处都有一个路灯。你需要编写一个程序,让机器人向东移动恰好 $N$ 个路灯,并在那里放下蛋糕。路线不必是直线的,只要机器人最终在正确的位置放下蛋糕即可。
不幸的是,机器人的内存非常有限,且不具备高级逻辑能力。为了控制机器人,你必须在开始时给它一个非常简单的程序,引导它在正确的位置放下蛋糕。该程序必须由一条或多条语句组成,每条语句告诉机器人在特定条件下该做什么。这些语句必须采用以下格式:
<S> <M> -> <action>
这意味着如果满足以下所有条件:
- 机器人处于状态
S。 - 机器人位于标记为
M的路灯处。
那么它将执行以下动作之一:
-
用一个新数字标记当前路灯,改变状态并移动。为此,
<action>必须格式化为"<D> <NS> <NM>",其中D是移动方向('W' 表示向西,'E' 表示向东),NS是机器人的新状态,NM是当前路灯的新标记。 -
在当前位置放下蛋糕并自毁。为此,
<action>必须格式化为"R"。
如果你输出两条或多条具有相同 S 和 M 值的语句,机器人将发生故障并销毁蛋糕。
如果机器人在任何时候处于状态 X 且位于标记为 Y 的路灯处,而没有 S=X 且 M=Y 的语句,机器人就会感到困惑并吃掉蛋糕。
所有状态和标记必须是绝对值不超过一百万 ($10^6$) 的整数。假设机器人初始处于状态 0,且所有路灯初始标记均为 0。
给定 $N$,编写一个程序,使机器人能在正确的位置放下蛋糕。你的程序最多只能使用 30 条语句,并且必须在 $X$ 步内终止。
输入格式
输入的第一行包含测试用例的数量 $T$。接下来是 $T$ 个测试用例。每个测试用例包含一行,其中包含一个整数 $N$,表示机器人必须放下蛋糕的路灯位置。
输出格式
对于每个测试用例,首先输出 "Case #x: y",其中 $x$ 是测试用例编号(从 1 开始),$y$ 是你使用的语句数量。接下来输出 $y$ 行,每行代表一条按照上述格式编写的机器人语句。
警告:评测机的响应时间可能比平时长 5 秒,因为你的输出会作为验证过程的一部分运行。
数据范围
$1 \le T \le 15$。
内存限制:1GB。
小数据集(测试集 1 - 可见;15 分)
$0 \le N \le 500$。
$X = 250,000$ ($2.5 \times 10^5$)。
时间限制:30 秒。
大数据集(测试集 2 - 隐藏;23 分)
$0 \le N \le 5000$。
$X = 150,000$ ($1.5 \times 10^5$)。
时间限制:60 秒。
样例
样例输入 1
3 0 4 0
样例输出 1
Case #1: 1 0 0 -> R Case #2: 5 0 0 -> E 1 1 1 0 -> E 2 1 2 0 -> E 3 1 3 0 -> E -1 1 -1 0 -> R Case #3: 3 0 0 -> E 1 1 0 1 -> R 1 0 -> W 0 1
说明
在第一个样例中,机器人初始处于状态 0,路灯上的标记为 0。因此它执行唯一的语句,即放下蛋糕。
在第二个样例中,机器人有五个状态:0, 1, 2, 3 和 -1。机器人执行以下动作:
- 将当前路灯标记为 1,向东移动,并进入状态 1。
- 将当前路灯标记为 1,向东移动,并进入状态 2。
- 将当前路灯标记为 1,向东移动,并进入状态 3。
- 将当前路灯标记为 1,向东移动,并进入状态 -1。
- 放下蛋糕。
在第三个样例中,机器人有两个状态,并执行以下动作:
- 将当前路灯标记为 1,向东移动,并进入状态 1。
- 将当前路灯标记为 1,向西移动,并进入状态 0。
- 放下蛋糕。
注意,机器人在两次处于状态 0 时执行了不同的动作,因为它每次看到的标记不同。