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
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;

int odw[1000007];
int pozS[1000007];
vector <int> WYN[1000007];


int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int n; cin>>n;
    int T[n];
    int S[n];
    for (int i=0; i<n; i++){
        cin>>T[i];
        S[i]=T[i];
    }
    sort(S, S+n);
    for (int i=0; i<n; i++) pozS[S[i]]=i;

    /*for (int i=0; i<n; i++) cout<<T[i]<<" ";
    cout<<endl;
    for (int i=0; i<n; i++) cout<<S[i]<<" ";
    cout<<endl;*/

    int git=0;
    int licznik=0;
    while (git==0){
        git=1;
        for (int i=0; i<100007; i++) odw[i]=0;
        for (int i=0; i<n; i++){
            int miejsce=pozS[T[i]];
            if (odw[i]==0 && odw[miejsce]==0 && T[i]!=S[i]){
                odw[i]=1;
                odw[miejsce]=1;
                int ti=T[i];
                T[i]=T[miejsce];
                T[miejsce]=ti;
                //cout<<miejsce<<" "<<i<<"\n";
                WYN[2*licznik].push_back(miejsce+1);
                WYN[2*licznik+1].push_back(i+1);
                if (T[i]!=S[i]) git=0;
            }
        }
        licznik++;
    }
    cout<<licznik<<"\n";
    for (int i=0; i<licznik; i++){
        cout<<WYN[i].size()*2<<"\n";
        for (int j=0; j<WYN[2*i].size(); j++) cout<<WYN[2*i][j]<<" ";
        for (int j=WYN[i*2+1].size()-1; j>=0; j--) cout<<WYN[2*i+1][j]<<" ";
        cout<<"\n";
    }
}