logo AlgoBeat OnlineJudge
登录 注册

#214733. [POI 2025/2026 #1] 并非哈诺塔 / Hanoj

内存限制:256 MiB 时间限制:6000 ms 标准输入输出
题目类型:VJudge(洛谷) 评测方式:VJudge
上传者: 匿名

题目描述

Bajtyna 最近在一个可疑的网站上买了一个玩具。她没有收到著名的汉诺塔谜题,而是在邮箱里发现了 Hanoj 塔。

Hanoj 塔由 个堆组成,上面分布着 个两两不同的积木,编号为从 的整数。在游戏开始时以及游戏的任何时刻,每个堆上的积木编号必须按照从堆顶到堆底递增的顺序排列。

在一步移动中,玩家可以从任意堆取走顶部的积木,并将其放置在任意堆的底部。

Bajtyna 现在想知道,要将所有积木放置在同一个堆上,最少需要多少步移动。帮她解决这个谜题。

输入格式

输入的第一行包含两个整数 ),分别表示积木的数量和堆的数量。堆用从 的整数编号。

接下来的 行包含堆的描述。

个堆(对于 )的描述由数字 )组成,其中 是第 个堆上的积木数量,而 是这些积木的编号,按从堆顶到堆底的顺序给出。

所有给出的积木具有范围从 的两两不同的编号,每个这样的积木都位于某个堆上(即 )。

输出格式

输出的第一行应打印一个整数 ,表示解决谜题所需的最少移动次数。接下来的 行应包含后续移动的描述。

步移动(对于 )的描述应由两个整数 )组成,表示将堆 的顶部元素移动到堆 的底部。

如果无法解决谜题,则应只打印包含 的一行。

如果有多种可能的解决方案,只需打印其中任意一种。

样例

样例输入 1

3 3
1 2
2 1 3
0

样例输出 1

3
2 3
1 3
2 3

样例输入 2

7 3
4 1 2 5 7
1 4
2 3 6

样例输出 2

-1

数据范围与提示

样例解释

  • 样例 中,首先我们将积木 1 从第二个堆的顶部移动到空的第三个堆。接下来,我们将积木 2 从第一个堆移动到第三个堆的底部。最后,我们将积木 3 从第二个堆移动到第三个堆的底部。这样,在游戏的任何时刻,每个堆上的积木编号都是递增排序的,并且在三次移动后,所有积木都位于第三个堆上。

  • 样例 中,解决谜题是不可能的。

大样例

可以在附件中获得大样例。

样例 是题面中展示的样例。此外:

  • :10 个积木和两个堆,其中一个是空的。
  • :1000 个积木和三个堆,其中一个是空的,其余两个分别包含编号为偶数和奇数的积木。
  • 个堆和 个积木,每个堆上有一个。

子任务

本题采用捆绑测试。

子任务编号 限制 得分
对于某些
无额外限制

如果你的答案只有第一行是正确的,你的解决方案将获得该测试 的分数。你不需要打印后续行即可获得这些分数。