集合 $\{1, 2, \dots, N\}$ 的一个划分(对于某个给定的自然数 $N$)是指将该集合划分为若干个非空子集,使得 $1$ 到 $N$ 中的每个数恰好出现在其中一个子集中。例如,集合 $\{1, 2, 3, 4, 5\}$ 的一个划分由子集 $\{1, 3\}$、$\{2, 4\}$ 和 $\{5\}$ 组成。指定划分的一种方式是使用一个数字序列 $x_1, x_2, \dots, x_N$ ($1 \le x_i \le N$),规定当且仅当 $x_i = x_j$ 时,$i$ 和 $j$ 属于划分中的同一个子集。上述例子中的划分可以用序列 $1, 2, 1, 2, 3$ 表示,也可以用序列 $5, 1, 5, 1, 4$ 表示。
Patricija 拥有集合 $\{1, 2, \dots, N\}$ 的两个划分。第一个划分由序列 $a_1, a_2, \dots, a_N$ 给出,第二个划分由序列 $b_1, b_2, \dots, b_N$ 给出。Patricija 对以下问题感兴趣:如果可以使用上述两个划分中的所有子集,那么组成集合 $\{1, 2, \dots, N\}$ 的划分所需的最少子集数量是多少?
根据给定的 $k \in \{0, 1, 2\}$,需要完成以下任务:
- 若 $k = 0$,需要求出上述问题的答案。
- 若 $k = 1$,允许修改给定的 $2N$ 个数字中的至多一个。需要求出在至多修改一次后,上述问题的最小可能答案。换句话说,需要最小化组成划分所需的最少子集数量。
- 若 $k = 2$,允许修改给定的 $2N$ 个数字中的至多一个。需要求出在至多修改一次后,上述问题的最大可能答案。换句话说,需要最大化组成划分所需的最少子集数量。
注意,当 $k = 1$ 或 $k = 2$ 时,修改后的数字必须在 $1$ 到 $N$ 之间。
请帮助 Patricija 编写一个程序来解决 $T$ 组这样的测试用例。
输入格式
第一行包含两个整数 $T$ 和 $k$,分别表示测试用例的数量和决定任务类型的参数。 接下来是 $T$ 组测试用例的描述。 每个测试用例以一个自然数 $N$ 开始,表示划分的大小。 接下来的两行分别包含序列 $a_1, \dots, a_N$ 和 $b_1, \dots, b_N$,它们定义了两个划分。
输出格式
对于每组测试用例,在单独的一行中输出问题的答案。
数据范围
在所有子任务中,满足 $1 \le T \le 200\,000$,$0 \le k \le 2$,且对于所有 $i = 1, 2, \dots, N$,$1 \le a_i, b_i \le N$。所有测试用例中 $N$ 的总和不超过 $200\,000$。
| 子任务 | 分值 | 数据范围 |
|---|---|---|
| 1 | 7 | $k = 0, N \le 8$, 所有测试用例中 $2^N$ 的总和 $\le 10^5$ |
| 2 | 23 | $k = 0$ |
| 3 | 15 | $k = 1, N \le 1000$, 所有测试用例中 $N^2$ 的总和 $\le 10^6$ |
| 4 | 16 | $k = 1$ |
| 5 | 19 | $k = 2, N \le 1000$, 所有测试用例中 $N^2$ 的总和 $\le 10^6$ |
| 6 | 20 | $k = 2$ |
样例
输入 1
2 0 4 1 1 2 3 1 2 3 3 7 1 1 1 1 2 3 4 1 2 3 4 4 4 4
输出 1
2 4
输入 2
3 1 4 1 1 2 3 1 2 3 3 4 1 1 1 1 1 2 3 3 7 1 1 1 1 2 3 4 1 2 3 4 4 4 4
输出 2
2 1 2
输入 3
3 2 4 1 1 2 3 1 2 3 3 4 1 1 1 3 1 2 3 3 7 1 1 1 2 3 4 5 1 2 3 4 4 4 4
输出 3
3 3 4
说明
第一个样例的解释: 对于第一个测试用例: 第一个序列定义的划分为 $\{1, 2\}, \{3\}, \{4\}$,第二个序列定义的划分为 $\{1\}, \{2\}, \{3, 4\}$。利用这些子集,我们可以构造出划分为 $\{1, 2\}$ 和 $\{3, 4\}$ 的两个子集。
对于第二个测试用例: 第一个序列定义的划分为 $\{1, 2, 3, 4\}, \{5\}, \{6\}, \{7\}$,第二个序列定义的划分为 $\{1\}, \{2\}, \{3\}, \{4, 5, 6, 7\}$。这两个划分中的任意一个都是最优的。