CF1385G Columns Swaps

题目描述

给定一个大小为 $2 \times n$ 的表格 $a$(即两行 $n$ 列),每个格子里填有 $1$ 到 $n$ 之间的整数。 每次操作,你可以选择某一列 $j$($1 \le j \le n$),交换该列中 $a_{1, j}$ 和 $a_{2, j}$ 的值。每一列最多只能被选择一次。 你的任务是,找出最少需要多少次操作,才能使表格的第一行和第二行都变成长度为 $n$ 的排列,或者判断是否无法做到。 你需要回答 $t$ 组独立的测试用例。 回忆一下,长度为 $n$ 的排列是指一个长度为 $n$ 的数组,包含了 $1$ 到 $n$ 的每个整数各一次(元素顺序可以任意)。

输入格式

输入的第一行包含一个整数 $t$($1 \le t \le 2 \times 10^4$),表示测试用例的数量。接下来是 $t$ 组测试用例。 每组测试用例的第一行包含一个整数 $n$($1 \le n \le 2 \times 10^5$),表示表格的列数。第二行包含 $n$ 个整数 $a_{1, 1}, a_{1, 2}, \dots, a_{1, n}$($1 \le a_{1, i} \le n$),表示表格第一行的元素。第三行包含 $n$ 个整数 $a_{2, 1}, a_{2, 2}, \dots, a_{2, n}$($1 \le a_{2, i} \le n$),表示表格第二行的元素。 保证所有测试用例中 $n$ 的总和不超过 $2 \times 10^5$($\sum n \le 2 \times 10^5$)。

输出格式

对于每组测试用例,输出一行答案:如果无法使两行都变成长度为 $n$ 的排列,输出 $-1$;否则,第一行输出一个整数 $k$,表示最少需要的操作次数,第二行输出 $k$ 个不同的整数 $pos_1, pos_2, \dots, pos_k$($1 \le pos_i \le n$),表示需要交换的列的编号,顺序任意。如果有多种方案,可以输出任意一种。

说明/提示

由 ChatGPT 4.1 翻译