Find password

时间限制: 1000 ms 内存限制: 65536 kb
总通过人数: 5 总提交人数: 18
Special Judge

题目背景

Koishi擅自给懒鱼的家门口上了一道锁,现在懒鱼没法回家了。为了回家,懒鱼需要想办法解开这把锁。

题目描述

具体来说,这把锁上有一列有 $n$ ($1\le n \le 10^3$)个滑块,最初处于解锁状态时,第 $i$ 个位置上的滑块标有数字 $i$。Koishi随意打乱了这些滑块之后,锁定了这把锁。此时,第 $i$ 个位置上的滑块标有的数字变成了 $a_i$,此时所有 $a_i$ 恰好组成一个 $1\sim n$ 的排列。

锁定这把锁之后,你每次可以选择两个位置上的滑块,记其所在位置为 $l,r$($l<r$),并将其交换,但需要满足两个奇怪的性质:

  1. 至少存在一个被选定的位置 $pos$ 满足,在最初这把锁锁定的时候,该位置上的滑块标有的数字为 $pos$。
  2. 在之前的所有操作中,未对位置为 $l,r$ 的滑块进行交换。

当对于所有 $i\in [1,n]$,第 $i$ 个位置上滑块上标有数字 $i$ 时,锁就再次恢复解锁状态,懒鱼就可以回家了。

然而,由规则可知,这把锁的解锁没有什么试错机会,因此懒鱼希望你能够写一个程序,直接输出正确的操作过程。

当然,也许实际上这把锁根本没法解锁,此时请你也务必告知懒鱼。

输入

第一行一个正整数 $n$($1\le n\le 10^3$),表示滑块个数。

第二行一行 $n$ 个正整数,第 $i$ 个正整数 $a_i$($1\le a_i\le n$)表示从左到右第 $i$ 个滑块上标有的数字。保证所有的 $a_i$ 恰好组成一个 $1\sim n$ 的排列。

输出

若这把锁无法解锁,输出一行一个整数 $-1$。

否则,第一行输出一个自然数 $k$($0\le k \le 2\times 10^4$),表示你接下来会执行的操作个数。可以证明,若这把锁可以解锁,则 $2\times 10^4$ 步以内必定能解锁。

接下来 $k$ 行,每行两个正整数 $l,r$($1\le l < r \le n$),表示选择交换的两个滑块。

输入样例

5
1 5 2 4 3

输出样例

6
1 4
1 2
4 5
1 5
3 4
2 4

提示

  1. 如果一开始满足条件1的位置太少了,那么一定无法还原。但是,实际上你也不需要用到很多位置。
  2. 在样例里,初始状态时,位置2上的数是5,位置5上的数是3,位置3上的数是2。

Author:一只懒懒懒懒懒鱼

相关推荐