#ABC350C. 排序

排序

排序

题目描述

给定 (1,2,,N)(1,2,\ldots,N) 的一个排列 A=(A1,,AN)A=(A_1,\ldots,A_N)

通过进行 00N1N-1 次(含端点)以下操作,将 AA 变成 (1,2,,N)(1,2,\ldots,N):

操作:选择满足 1i<jN1\leq i \lt j \leq N 的任意整数对 (i,j)(i,j),交换 AA 中第 ii 个和第 jj 个位置的元素。

可以证明,在给定约束下,总能将 AA 变成 (1,2,,N)(1,2,\ldots,N)

输入格式

输入按以下格式从标准输入给出:

NN
A1A_1 \ldots ANA_N

输出格式

设操作次数为 KK。输出 K+1K+1 行。

第一行输出 KK

(l+1)(l+1) 行(1lK1\leq l \leq K)输出第 ll 次操作中选择的整数 iijj,用空格分隔。

任何满足题目描述中条件的输出均视为正确。

样例

5
3 4 1 2 5
2
1 3
2 4

操作按如下方式改变序列:

最初,A=(3,4,1,2,5)A=(3,4,1,2,5)

第一次操作交换第 1 个和第 3 个元素,得到 A=(1,4,3,2,5)A=(1,4,3,2,5)

第二次操作交换第 2 个和第 4 个元素,得到 A=(1,2,3,4,5)A=(1,2,3,4,5)

例如,以下输出也被视为正确:

4
2 3
3 4
1 2
2 3
4
1 2 3 4
0
3
3 1 2
2
1 2
2 3

数据范围

  • 2N2×1052 \leq N \leq 2\times 10^5
  • (A1,,AN)(A_1,\ldots,A_N)(1,2,,N)(1,2,\ldots,N) 的排列。
  • 输入中的所有值均为整数。

提示

答案不唯一,输出任意合法解即可。

难度 普及
通过率
尝试 0
已通过 0
ID
3272
类型
传统题
Time Limit
2000ms
Memory Limit
1024MiB
上传者
标签