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
#include <bits/stdc++.h>

std::vector<std::vector<std::pair<int, int>>> zmiany;

void ustal_zmiany(std::queue<int> q, int d) {
    if(q.size() <= 1) return;
    if(d==zmiany.size()) zmiany.push_back(std::vector<std::pair<int, int>>());

    std::queue<int> nq;
    int a, b;
    while(q.size() > 1) {
        a = q.front(); q.pop();
        b = q.front(); q.pop();
        nq.push(b);
        zmiany[d].push_back({a, b});
    }
    if(q.size() == 1) {
        nq.push(q.front()); q.pop();
    }
    ustal_zmiany(nq, d+1);
}

int main() {

    std::ios_base::sync_with_stdio(false); std::cin.tie(NULL); std::cout.tie(NULL);

    int n;
    std::cin >> n;
    std::vector<int> h(n);
    std::vector<int> perm(n);
    std::vector<std::pair<int, int>> h_sorted(n);

    for(int i=0; i<n; ++i) {
        std::cin >> h[i];
        h_sorted[i] = {h[i], i};
    }

    std::sort(h_sorted.begin(), h_sorted.end());

    for(int i=0; i<n; ++i) {
        perm[i] = h_sorted[i].second;
        // perm[h_sorted[i].second] = i;
    }

    std::vector<bool> w_cyklu(n);
    std::vector<std::queue<int>> cykle;

    for(int i=0; i<n; ++i) {
        if(w_cyklu[i]) continue;
        std::queue<int> q;

        int a=i;
        do {
            q.push(a);
            w_cyklu[a] = true;
            a = perm[a];
        }
        while(a!=i);
        cykle.push_back(q);
    }


    for(int i=0; i<cykle.size(); ++i) {
        ustal_zmiany(cykle[i], 0);
    }

    std::cout<<zmiany.size()<<'\n';

    for(int i=0; i<zmiany.size(); ++i) {
        std::cout<<zmiany[i].size()*2<<'\n';
        for(int j=0; j<zmiany[i].size(); ++j) {
            std::cout<<zmiany[i][j].first+1<<' ';
        }
        for(int j=zmiany[i].size()-1; j>=0; --j) {
            std::cout<<zmiany[i][j].second+1<<' ';
        }
        std::cout<<'\n';
    }

    return 0;
}