QOJ.ac

QOJ

حد الوقت: 6 s حد الذاكرة: 256 MB مجموع النقاط: 100

#14756. 汉诺塔

الإحصائيات

Bajtyna 最近在一个可疑的网站上买了一个玩具。她本以为邮寄过来的会是她熟知的“汉诺塔”(Tower of Hanoi)谜题,结果在邮箱里收到的却是“Hanoj 塔”。

Hanoj 塔由 $m$ 个栈组成,上面分布着 $n$ 个两两不同的木块,木块用 $1$ 到 $n$ 的整数进行编号。在游戏开始时以及游戏过程中的任意时刻,每个栈中的木块编号从栈顶到栈底必须是严格单调递增的。在一次操作中,玩家可以从任意栈的栈顶取出一个木块,并将其放入任意栈的栈底。

Bajtyna 现在想知道,最少需要多少次操作才能将所有木块移动到同一个栈中。请帮助她解决这个谜题。

输入格式

输入的第一行包含两个整数 $n$ 和 $m$($2 \le m \le n \le 10^6$),分别表示木块的数量和栈的数量。栈从 $1$ 到 $m$ 进行编号。

接下来的 $m$ 行包含对各个栈的描述。第 $i$ 个栈(对于 $1 \le i \le m$)的描述由整数 $k_i, v_{i,1}, \dots, v_{i,k_i}$($0 \le k_i \le n$,$1 \le v_{i,1} < v_{i,2} < \dots < v_{i,k_i} \le n$)组成,其中 $k_i$ 是第 $i$ 个栈中的木块数量,而 $v_{i,1}, \dots, v_{i,k_i}$ 是这些木块按从栈顶到栈底的顺序排列的编号。

所有给出的木块编号在 $1$ 到 $n$ 之间且两两不同,每个木块都恰好位于某一个栈中(即 $k_1 + \dots + k_m = n$)。

输出格式

输出的第一行应包含一个整数 $h$,表示解决该谜题所需的最少操作次数。

接下来的 $h$ 行应包含对后续操作的描述。第 $i$ 次操作(对于 $1 \le i \le h$)的描述应由两个整数 $a_i, b_i$($1 \le a_i, b_i \le m$)组成,表示将栈 $a_i$ 顶部的元素移动到栈 $b_i$ 的底部。

如果无法解决该谜题,则只需输出一行,包含 $-1$。

如果存在多种可能的解决方案,输出其中任意一种即可。

样例

输入样例 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$ 移动到第三个栈的底部。这样,在游戏的任何时刻,每个栈中的木块编号都是升序排列的,且在三次操作后,所有木块都位于第三个栈中。

在第二个样例中,无法解决该谜题。

样例测试点:

  • 测试点 0a 和 0b 即为上述样例。此外:
  • 0c:$10$ 个木块和两个栈,其中一个为空。
  • 0d:$1000$ 个木块和三个栈,其中一个为空,另外两个分别包含偶数和奇数编号的木块。
  • 0e:$10^6$ 个栈和 $10^6$ 个木块,每个栈上各有一个。

子任务

测试点分为以下子任务。每个子任务的测试由一个或多个独立的测试组组成。

子任务 数据范围 分值
1 $n \le 6$ 15
2 对于某个 $i \in \{1, \dots, m\}$,$k_i = 0$ 27
3 $n \le 1000$ 22
4 $m = 3$ 18
5 无附加限制 18

如果你的输出中只有第一行(即操作次数 $h$)是正确的,你将获得该测试点 50% 的分数。你不需要输出后续的行即可获得这部分分数。

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.