#72. 汉诺塔问题2

汉诺塔问题2

题目描述

给定一个 汉诺塔 的任意合法状态,共有三根柱子(编号 1、2、3)和 nn 个圆盘。
每个圆盘编号从 11nn,编号越大表示盘子越大。
给出当前每个盘子所在的柱子编号,你需要输出一系列合法的移动操作,使得最终所有盘子都移动到 第 3 根柱子 上。

一次合法的移动是:

  • 将某一根柱子顶部的盘子拿起,放到另一根柱子的顶部;
  • 且不能把大盘子放在小盘子上。

输入保证当前状态是合法的(即每根柱子从下到上盘子编号严格递减)。

输出步数最少的方案。


输入格式

  • 第一行:一个整数 m1m1,表示第一个柱子上盘子的数量。 接下来 m1m1 个整数 p1,p2,,pm1p_1, p_2, \dots, p_{m1},表示第一个柱子上的盘子编号。
  • 第二行:一个整数 m2m2,表示第二个柱子上盘子的数量。 接下来m2m2 个整数 p1,p2,,pm2p_1, p_2, \dots, p_{m2},表示第二个柱子上的盘子编号。
  • 第三行:一个整数 m3m3,表示第三个柱子上盘子的数量。 接下来 m3m3 个整数 p1,p2,,pm3p_1, p_2, \dots, p_{m3},表示第三个柱子上的盘子编号。

输入保证该状态是合法的。

m1,m2,m30m1 , m2 , m3 \ge 0
m1+m2+m314m1 + m2 + m3 \le 14


输出格式

每行输出两个整数 a b1a,b3,  ab1 \le a,b \le 3, \; a \ne b),表示将柱子 a 顶部的盘子移动到柱子 b 顶部。

执行完所有操作后,所有盘子应位于第 3 根柱子上,且从下到上编号严格递减。

1 1 
2 2 3
0
1 3
2 1
3 1
2 3
1 2
1 3
2 3