有两个机器人迷失在仓库中。机器人编号为 1 和 2。仓库是一个 $R$ 行 $C$ 列的网格,每个格子要么是障碍物,要么是空地。机器人通过无线电指令进行控制。每条指令包含两部分数据:
robot - 1 或 2,表示我们要移动的机器人编号。
direction - 字符 'U'、'D'、'L' 或 'R',表示我们希望机器人移动的方向(上、下、左、右)。
如果目标格子是障碍物、被另一个机器人占据或在仓库之外,则什么都不会发生,机器人保持在原地。如果格子是空地,机器人就会移动到该处。
机器人配备了 GPS 设备,但由于部署期间的故障,我们无法接收到机器人的确切位置,只能接收到它们之间的曼哈顿距离。如果机器人在 $(r_1, c_1)$ 和 $(r_2, c_2)$,那么它们的曼哈顿距离为 $|r_1 - r_2| + |c_1 - c_2|$。
在每条指令之后,无论成功与否,我们唯一知道的信息就是当前的距离。
机器人目前位于仓库中不同的、未被占据的位置。编写一个程序,发布一系列指令,将两个机器人放置在仓库中的两个特殊提取点上。指令通过标准输出发出。每条指令后,你必须从标准输入读取当前的距离。
仓库保证所有空地都是连通的。
交互
在与机器人交互之前,会给出一些输入数据。
第一行包含整数 $R$ 和 $C$ ($2 \le R, C \le 200$),即仓库的行数和列数。
接下来的 $R$ 行,每行包含 $C$ 个字符。只会出现字符 '.'、'#' 和 'x'。'.' 表示空地,'#' 表示障碍物,'x' 表示两个提取点之一。会有且仅有两个 'x' 字符。
下一行包含起始的曼哈顿距离。
加载所有输入数据后,你可以开始使用标准输入向机器人发出指令。每条指令必须格式化为 "robot direction",后跟换行符。每条指令后,你必须刷新标准输出。在 C/C++ 中使用 fflush(stdout),在 Pascal 中使用 flush(StdOut)。
当你完成指令发布后,打印 "0"(单独占一行)并以返回码 0 退出程序。
子任务
测试用例价值 40 分,不包含障碍物。 测试用例价值 80 分,满足 $R$ 和 $C \le 50$。
说明
你可以使用评估系统中的 TEST 界面测试你的解决方案。对于每个测试,必须提供一个输入文件。输入文件必须遵循以下格式:
输入的第一行必须包含两个整数 $R$ 和 $C$ ($2 \le R, C \le 200$)。
接下来的 $R$ 行必须包含 $C$ 个字符。字符只能是 '.'、'#'、'x'、'1' 和 '2'。必须恰好有两个 'x' 字符。字符 '1' 和 '2' 表示机器人的起始位置。输入中必须恰好各有一个 '1' 和 '2'。当然,当呈现给你的解决方案作为输入时,字符 '1' 和 '2' 将被转换为 '.'。
此类输入文件的示例如下:
4 5 ##x1. .##.. ..... 2...x
要在评估系统上测试你的代码,你必须首先使用 SUBMIT 界面提交你的解决方案,然后使用 TEST 界面进行测试。