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