T229472 C. 排排队

题目背景

亲爱的 A 组参赛选手: 欢迎参加第四届“传智杯”全国大学生IT技能大赛。 虽然您已经通过初赛对本 OJ 的评测形式有了一定的了解,但还是请您阅读如下事项: 1. 选手程序必须输出到标准输出(stdout),且不得输出除「输出格式」规定外的任何内容(如 "please input n"),否则会得到 Wrong Answer 的结果。 2. 使用 java 语言的选手必须将 main() 方法放在 public class Main 中。 3. 使用 Python 语言的选手可以在提交时选择语言 "pypy",对于大部分问题,这样可以提升您程序的运行效率。 4. 程序运行时可用的栈空间大小与内存大小限制相同,且计入程序内存使用。 ----------------- 小智在传智专修学院担任了体育委员,负责排队一事。

题目描述

在传智专修学院中,每个人都有一个身高 $a_{i}$,并且只有**相邻**的两个人可以交换位置。小智带领的队伍有 $n$ 个人,他现在要给大家排队形。 给定一个长度为 $n$ 的序列 $b$,一个队形被认为美观,当且仅当对于所有的 $i = 1, 2, 3, \dots n$,$a_{i} =b_{i}$。小智想知道,他能否让大家的队形变得美观,并且交换相邻两个人的次数不超过 $n^2$ 次。这个问题把小智难住了,请你帮他来解决这个问题,如果存在合法的交换方案,输出 `YES`,并给出一组方案;否则,输出 `NO`。

输入格式

**本题单测试点内有多组测试数据**。 第一行是一个整数 $T$,表示数据组数,对于每组数据: 第一行是一个整数,表示队伍的长度 $n$。 第二行有 $n$ 个整数,第 $i$ 个整数表示第 $i$ 个人的身高 $a_i$。 第三行有 $n$ 个整数,第 $i$ 个整数表示美观队形里第 $i$ 个人的身高 $b_i$。

输出格式

对每组数据依次分别输出答案。 对于每组数据,若存在一种方案,则在第一行输出一个 `YES`,否则输出一个 `NO`。 如果输出 `YES`,下面则输出若干行每行两个整数 $i,j$,表示第 $i$ 个同学和第 $j$ 个同学交换位置,显然 $|i-j|=1$。在交换完成后,你还需要输出一行 `0 0` 表示你的操作结束了,请注意数组的下标从 1 开始编号至 $n$。 如果输出 `NO`,则接下来什么都不需要输出。 **请特别注意,对于每组数据,你的操作次数不能超过 $n^2$(不包括 `0 0` 一行),否则将得到 WA(Wrong Answer) 的结果**。

说明/提示

### 数据规模与约定 对于全部的测试点,保证 $1\leq T \leq 10$,$1\leq n \leq 10^3$,$1\leq a_{i},b_{i}\leq 10^9$,且各个测试点 $n$ 之和不超过 $1000$,即 $\sum n\leq 10^3$。 ### 提示 - 请注意大量的输出输出对程序效率造成的影响,不要频繁刷新缓冲区。例如,对于使用 `std::cout` 的 C++ 选手,请使用 `'\n'` 而不是 `std::endl` 来换行;对于 java 选手,请选择高效率的输出方式,如使用 PrintWriter;python 选手可以正常的使用 print 而无需考虑效率问题。 - 请按照输出格式的要求输出您的答案,如果格式不符合要求,返回的评测信息将可能是 TLE、RE、WA、UKE 等任何结果。 ### C++ 语言的高效输出样例 ```cpp #include int main() { std::ios::sync_with_stdio(false); std::cin.tie(0); for (int i = 1; i