#T2378. 交换轮排序(Swap Round Sorting)

交换轮排序(Swap Round Sorting)

链接: https://cses.fi/problemset/task/1698

板块: Additional Problems II

时限: 1.00 s | 内存: 512 MB

题目描述

给定一个包含 1,2,,n1,2,\dots,n 的一个排列的数组,你的任务是用「交换轮」把数组排序。每一轮交换中,你可以选择任意多个互不相交的元素对,并交换每一对。

你的任务是求出最少需要多少轮,并给出每一轮所选的元素对。

输入

第一行包含一个整数 nn:数组的大小。

第二行有 nn 个整数 x1,x2,,xnx_1,x_2,\dots,x_n:初始的排列。

输出

先输出一个整数 kk:最少轮数。

然后,对每一轮,输出交换的次数以及每次交换的下标。你可以输出任意合法解。

数据范围

1n21051 \le n \le 2 \cdot 10^5

样例输入

5
5 2 1 3 4

样例输出

2
2
1 3
4 5
1
3 5