gym100971B

来源:互联网 发布:网狐荣耀源码 编辑:程序博客网 时间:2024/05/22 07:07


A permutation of n numbers is a sequence of integers from 1 ton where each number is occurred exactly once. If a permutationp1, p2, ..., pn has an index i such that pi = i, this index is called a fixed point.

A derangement is a permutation without any fixed points.

Let's denote the operation swap(a, b) as swapping elements on positionsa and b.

For the given permutation find the minimal number of swap operations needed to turn it into derangement.

Input

The first line contains an integer n (2 ≤ n ≤ 200000) — the number of elements in a permutation.

The second line contains the elements of the permutation — n distinct integers from 1 to n.

Output

In the first line output a single integer k — the minimal number ofswap operations needed to transform the permutation into derangement.

In each of the next k lines output two integersai andbi(1 ≤ ai, bi ≤ n) — the arguments ofswap operations.

If there are multiple possible solutions, output any of them.

Example
Input
66 2 4 3 5 1
Output
12 5
直接遍历就好了
ac代码:
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int a[1000005];int main(){    int n;    while(cin>>n)    {        int sum=0;        for(int i=1;i<=n;i++)        {            scanf("%d",&a[i]);            if(a[i]==i)            {                sum++;            }        }        if(sum%2==0)        cout<<sum/2<<endl;        else        cout<<sum/2+1<<endl;        int ans=0;        int p;        for(int i=1;i<=n;i++)        {           if(a[i]==i)           {               ans++;               if(ans==2)               {                   printf("%d %d\n",p,i);                   int tmp=a[p];                   a[p]=a[i];                   a[i]=tmp;                   ans=0;               }               else               p=i;           }        }        if(sum%2!=0)        {           for(int i=1;i<=n;i++)           {               if(a[i]!=i)               {                   printf("%d %d\n",i,p);                   break;               }           }        }    }    return 0;}
原创粉丝点击