1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
#include <bits/stdc++.h>
using namespace std;
int x[3006][2];
int y[3006][2];
int z[3006][2];
int main()
{
	int n;
	cin >> n;
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
	for(int i=0; i<n; i++)
	{
	int A;
	cin >> A;
	x[i][0]=A;
	x[i][1]=A;
	}
	int G=1;
	while(G==1)
	{
		G=0;
		for(int j=0; j<n-1; j++)
		{
			if(x[j][1]>x[j+1][1])
			{
				int T=x[j][1];
				x[j][1]=x[j+1][1];
				x[j+1][1]=T;
				G=1;
			}
		}
	}
	for(int k=0; k<n; k++)
	{
		x[x[k][1]][2]=k;
	}
	for(int u=0; u<n; u++)
	{
		y[u][0]=x[x[u][0]][2];
	}
	int L=0;
	int L1=0;
	int O=0;
	int O1=0;
	while(O<n)
	{
		if(y[O1][1]==1)
		{
			if(L1>L)
			{
				L=L1;
			}
			L1=0;
			O=O+1;	
			O1=O;
		}	
		else
		{
			y[O1][1]=1;
			O1=y[O1][0];
			L1=L1+1;
		}
	}
	cout << (L+(L%2))/2 << "\n";
	int Gm=1, G1=1, U=0, b=0;
	while(G1==1&&b<10)
	{
		b=b+1;
		G1=0; 
		U=0;
	//	for(int t=0; t<n; t++)
		//	{
		//cout << y[t][0] << " z=" << z[t][0] << "=" <<  t << "\n";	
		//	}	
		for(int q=0; q<n; q++)
		{//cout << q << " " << y[q][0] << "\n";
			if(y[q][0]==q)
			{
				z[q][0]=1000;
			}
			else if(z[y[q][0]][0]==Gm)
			{
				z[q][0]=Gm;
			}
			else if((z[q][0]<Gm)&&(z[y[q][0]][0]<Gm))
			{
				int N=y[q][0];
				y[q][0]=y[N][0];
				y[N][0]=N;
				z[q][0]=Gm;
				z[y[q][0]][0]=Gm;
				z[U][1]=q;
				z[U+1][1]=y[N][0];
				U=U+2;
				G1=1;
			}	
		}
		if(U>0)
		{
			cout << U << "\n";
			for(int o=0; o<U; o=o+2)
			{
				cout << z[o][1]+1 << " " << z[U-o-1][1]+1 << " ";
			}
			cout << "\n";
		}
		Gm=Gm+1;
	}
}