C. 你优雅地飞向远方
时间限制:每个测试点 2 秒
内存限制:256 兆字节
题目描述
给定两个长度为 n 的排列 a 和 b。你可以执行至多 n 次以下操作:
选择两个下标 i 和 j(1≤i,j≤n,i=j),交换 ai 与 aj,同时交换 bi 与 bj。
判断在若干次操作后,能否使 a 与 b 互为逆序。换句话说,要求对于每个 i=1,2,…,n,满足:
ai=bn+1−i
如果可能,输出任意一种合法的操作序列;否则输出 −1。
输入格式
每个测试文件包含多个测试用例。
第一行包含一个整数 t(1≤t≤104),表示测试用例的数量。
接下来每个测试用例:
- 第一行包含一个整数 n(2≤n≤2×105)—— 排列的长度。
- 第二行包含 n 个整数 a1,a2,…,an(1≤ai≤n)。
- 第三行包含 n 个整数 b1,b2,…,bn(1≤bi≤n)。
数据保证 a 和 b 是长度为 n 的排列。
所有测试用例的 n 之和不超过 2×105。
输出格式
对于每个测试用例:
- 如果不可能,输出一行 −1。
- 否则,第一行输出一个整数 m(0≤m≤n)—— 操作次数。
接下来 m 行,每行输出两个整数 i 和 j(1≤i,j≤n,i=j),表示依次进行的操作。
如果有多种可行方案,输出任意一种即可。
示例
输入
5
2
1 2
1 2
2
1 2
2 1
4
1 3 2 4
2 4 1 3
5
2 5 1 3 4
3 5 4 2 1
5
3 1 2 4 5
1 2 3 4 5
输出
-1
0
1
1 2
2
1 2
1 3
-1
样例解释
- 第二个测试用例:b 已经是 a 的逆序。
- 第三个测试用例:执行一次操作后,b 成为 a 的逆序:
交换 a1,a2 及 b1,b2。
此时 a=[3,1,2,4],b=[4,2,1,3]。
- 第四个测试用例:依次执行以下操作后,b 成为 a 的逆序:
- 交换 a1,a2 及 b1,b2,得到 a=[5,2,1,3,4],b=[5,3,4,2,1]。
- 交换 a1,a3 及 b1,b3,得到 a=[1,2,5,3,4],b=[4,3,5,2,1]。