#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;
}
