#include <bits/stdc++.h>   using namespace std;   const int oo = 0x3f3f3f3f;   const double eps = 1e-9;   int N, C;   vector<int> c[6];   vector<pair<int, int> > cl;   int seq[100008];   bool seen[100008];   struct Action {     int len;     int b[5];     int c[5];   };   vector<Action> act;   void cycle2action(int c, int l, Action &a, int p) {     a.c[p + l - 1] = a.b[p] = c;     for (int i = (1); i < (l); ++i) {       a.c[p + i - 1] = a.b[p + i] = seq[a.b[p + i - 1]];     }   }   int main() {     cin >> N;     for (int i = (1); i < (N + 1); ++i) cin >> seq[i];     fill_n(seen, N + 1, false);     C = 0;     for (int i = (1); i < (N + 1); ++i)       if (!seen[i]) {         seen[i] = true;         if (seq[i] == i) continue;         C++;         int len = 1;         for (int k = seq[i]; k != i; k = seq[k]) {           seen[k] = true;           len++;         }         if (len <= 5) {           c[len].push_back(i);           continue;         }         cl.push_back(pair<int, int>(i, len));       }     while (C > 0) {       while (!cl.empty()) {         int l = cl.back().second;         int k = cl.back().first;         cl.pop_back();         Action a;         a.len = 5;         cycle2action(k, 5, a, 0);         l -= 4;         seq[a.c[4]] = seq[a.b[4]];         if (l > 5)           cl.push_back(pair<int, int>(a.c[4], l));         else           c[l].push_back(a.c[4]);         act.push_back(a);       }       for (int l = (4); l < (6); ++l) {         while (!c[l].empty()) {           Action a;           a.len = l;           cycle2action(c[l].back(), l, a, 0);           c[l].pop_back();           act.push_back(a);           C--;           continue;         }       }       while (int((c[2]).size()) && int((c[3]).size())) {         Action a;         a.len = 5;         cycle2action(c[2].back(), 2, a, 0);         cycle2action(c[3].back(), 3, a, 2);         c[2].pop_back();         c[3].pop_back();         act.push_back(a);         C -= 2;         continue;       }       while (int((c[2]).size()) >= 2) {         Action a;         a.len = 4;         cycle2action(c[2].back(), 2, a, 0);         c[2].pop_back();         cycle2action(c[2].back(), 2, a, 2);         c[2].pop_back();         act.push_back(a);         C -= 2;       }       if (int((c[3]).size()) >= 2) {         Action a;         a.len = 5;         cycle2action(c[3].back(), 3, a, 0);         c[3].pop_back();         int k = c[3].back();         c[3].pop_back();         int l = seq[k];         int m = seq[l];         a.b[3] = a.c[4] = k;         a.b[4] = a.c[3] = m;         swap(seq[k], seq[m]);         c[2].push_back(l);         act.push_back(a);         C--;         continue;       }       if (int((c[3]).size()) == 1) {         Action a;         a.len = 3;         cycle2action(c[3].back(), 3, a, 0);         c[3].pop_back();         act.push_back(a);         C--;         continue;       }       if (int((c[2]).size()) == 1) {         Action a;         a.len = 2;         cycle2action(c[2].back(), 2, a, 0);         c[2].pop_back();         act.push_back(a);         C--;         continue;       }     }     cout << int((act).size()) << endl;     for (__typeof__((act).begin()) a = (act).begin(); a != (act).end(); ++a) {       cout << a->len << endl;       for (int i = (0); i < (a->len); ++i) cout << (i ?     :   ) << a->b[i];       cout << endl;       for (int i = (0); i < (a->len); ++i) cout << (i ?     :   ) << a->c[i];       cout << endl;     }     return 0;   }