Checker Slide 是一个在棋盘上移动跳棋的益智游戏。在本题中,我们将在一个 $6 \times 6$ 的棋盘上使用 4 枚跳棋。一次移动是指选择其中一枚跳棋,并将其向左、向右、向上或向下移动,直到它碰到棋盘边缘或另一枚跳棋为止。游戏的目的是找到一个移动序列,从给定的初始状态到达给定的目标状态。
一些示例位置
例如,位置 1 可以通过将两枚靠下的跳棋向上移动(移动到靠上的跳棋正下方),然后将右侧的跳棋向左移动,从而变为位置 2。
注意,位置 3 不能作为任何(非空)移动序列的结束位置,因为此时没有任何跳棋与棋盘边缘或其他跳棋相邻。
将位置 1 移动到位置 4 的一种方法如下所示:
编写一个程序,求出从给定的初始位置到达给定的目标位置所需的最少移动步数 $N$。对于本题,保证每个测试用例至少存在一个解。
输入格式
输入包含两行。每行包含八个由空格分隔的十进制整数。这些数值($0 \le \text{value} \le 5$)给出了四枚跳棋在棋盘上的行和列坐标($\text{ROW1 COLUMN1 ROW2 COLUMN2 ROW3 COLUMN3 ROW4 COLUMN4}$)。第一行给出初始位置,第二行给出每枚跳棋的目标位置。
输出格式
输出的第一行包含一个十进制整数 $N$,表示解决该问题所需的最少步数。接下来是 $N$ 行,每行描述下一步的跳棋移动。每行应包含四个由空格分隔的十进制整数,分别表示被移动跳棋的起始行、起始列、结束行和结束列。
样例
样例输入 1
5 5 5 0 0 5 0 0 2 2 2 1 1 2 1 1
样例输出 1
12 5 0 1 0 0 5 4 5 0 0 0 5 4 5 1 5 5 5 2 5 1 5 1 1 0 5 1 5 1 5 1 2 1 1 5 1 1 0 1 1 5 1 2 1 2 5 2 2