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 <iostream>
#include <vector>
#include <algorithm>
#include <map>

using namespace std;

const int maxx = 3e3+7;
map<int,int>mapa;
int tab[maxx],bat[maxx];
vector<int>zmiana[maxx];
bool cmp(int a, int b)
{
    return a<b;
}

int main()
{
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    int n; cin>>n;
    for(int i=1; n>=i; i++)
    {
        cin>>tab[i];
        bat[i] = tab[i];
    }
    sort(tab+1,tab+n+1,cmp);
    int cnt = 1;
    for(int i=1; n>=i; i++)
    {
        if(!mapa[tab[i]])
        {
            mapa[tab[i]] = cnt; cnt++;
        }
    }
    bool czy[maxx];
    int licznik = 0;
        bool flaga = 1;
        for(int i=1; n>=i; i++)
        {
            if(mapa[bat[i]] != i) flaga = 0;
        }
        if(flaga)
        {
            cout<<"0";
            return 0;
        }
    while(true)
    {
        fill(czy,czy+maxx,0);
        for(int i=1; n>=i; i++)
        {
            if(!czy[i] and !czy[mapa[bat[i]]] and i != mapa[bat[i]])
            {
                czy[i] = czy[mapa[bat[i]]] = true;
                zmiana[licznik].push_back(mapa[bat[i]]);
                zmiana[licznik].push_back(i);
                swap(bat[i], bat[mapa[bat[i]]]);
            }
        }
        licznik++;
        flaga = 1;
        for(int i=1; n>=i; i++)
        {
            if(mapa[bat[i]] != i) flaga = 0;
        }
        if(flaga) break;
    }
    cout<<licznik<<endl;
    for(int i=0; licznik>i; i++)
    {
        cout<<zmiana[i].size()<<endl;
        vector<int>temp,pmet;
        temp.clear(); pmet.clear();
        for(int j=0; zmiana[i].size()>j; j++)
        {
            //cout<<zmiana[i][j]<<" ";
            if(j%2==0)
            {
                temp.push_back(zmiana[i][j]);
            }
            else
            {
                pmet.push_back(zmiana[i][j]);
            }
        }
        for(int j=0; temp.size()>j; j++) cout<<temp[j]<<" ";
        for(int j=pmet.size()-1; j>=0; j--) cout<<pmet[j]<<" ";
        cout<<'\n';
    }
    


}
/*

5
1670
2011
1560
1232
1447

6 
1556 
1449 
1863  
2014  
1333 
1220

*/