这是一个交互式问题。
在无限大的棋盘上有五枚白象和一枚黑王。你执白棋。你的任务是将黑王将死或逼和,或者判断黑王是否能够避免被将死或逼和。白棋先行。
你将有 50 步机会来完成任务。如果在白棋走完第 50 步后,黑王仍未被将死或逼和,则答案将被视为错误。
棋子的初始坐标绝对值不超过 $10^6$。在游戏过程中,所有坐标的绝对值不得超过 $10^9$。
交互
输入的第一行包含一个整数 $t$,表示需要解决的问题实例数量 ($1 \le t \le 1000$)。
每个实例开始时,输入一行包含六对整数 $x_i$ 和 $y_i$:前五对是象的坐标,最后一对是王的坐标。所有这些整数的绝对值均不超过 $10^6$。
随后游戏开始。你的每一步移动由一行四个整数 $x_1 \ y_1 \ x_2 \ y_2$ 组成:表示象的起始坐标和目标坐标。交互器会返回一行四个整数 $x_1 \ y_1 \ x_2 \ y_2$:表示王的起始坐标和目标坐标。当黑王被将死或逼和时,交互器会返回四个零,随后进入下一个问题实例(如果有)。如果你的程序认为无法将死或逼和黑王,则必须输出四个零来代替第一步移动,在这种情况下,交互器会立即进入下一个问题实例(如果有)。移动棋子的坐标绝对值不得超过 $10^9$。
详见样例交互。
如果将死或逼和是可能的,你的程序必须在不超过 50 步内完成,否则答案将被视为无效(请记住五十步规则)。你不需要找到最优解,但保证在任何存在解的情况下,都可以在不超过 50 步内达到目标。
如果将死或逼和是不可能的,你的程序应立即输出一行四个零(不允许移动),否则答案将被视为错误。
保证每个问题实例都是合法的,即没有两枚棋子占据同一个格子,且王当前未被将军。
在每次输出一行后,请刷新输出缓冲区:例如,在 C 或 C++ 中调用 fflush (stdout),在 Java 中调用 System.out.flush (),或在 Python 中调用 sys.stdout.flush ()。
样例
样例输入 1
4 1 1 2 2 3 3 4 4 5 5 7 5 1 1 1 2 1 4 1 5 2 2 3 5 0 0 0 0 1 2 2 3 4 5 5 6 6 7 5 3 3 2 4 2 3 6 4 6 6 4 3 4 0 0 0 0
样例输出 1
0 0 0 0 2 2 1 3 0 0 0 0 6 4 5 5
说明
空行仅用于展示事件序列。
在第一和第三个测试用例中,有五枚同色的象。在第二个测试用例中,可以在一步内实现将死。在第四个测试用例中,可以在一步内实现逼和。