#include <bits/stdc++.h>
using namespace std;
int n, l = 0, c = 0, u, v, t, x;
int in[200005], a[200005], b[200005];
bool visit[200005];
vector<pair<int, int> > H[200005];
vector<int> G[10], E[200005];
void calc(int x) {
  ++l;
  for (int y = x; !visit[y]; y = in[y]) {
    E[l].push_back(y);
    visit[y] = 1;
  }
  for (; E[l].size() > 5;) {
    t = 5;
    for (int j = 1; j < 6; ++j) {
      a[t - j + 1] = E[l].back();
      E[l].pop_back();
    }
    b[1] = a[t];
    for (int j = 2; j <= t; ++j) b[j] = a[j - 1];
    ++c;
    for (int j = 1; j <= t; ++j) H[c].push_back(make_pair(a[j], b[j]));
    E[l].push_back(a[t]);
  }
  if (E[l].size() >= 4) {
    t = E[l].size();
    for (int j = 1; j <= t; ++j) {
      a[t - j + 1] = E[l].back();
      E[l].pop_back();
    }
    b[1] = a[t];
    for (int j = 2; j <= t; ++j) b[j] = a[j - 1];
    ++c;
    for (int j = 1; j <= t; ++j) H[c].push_back(make_pair(a[j], b[j]));
    E[l--].clear();
  } else
    G[E[l].size()].push_back(l);
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; ++i) {
    scanf("%d", &x);
    in[x] = i;
  }
  for (int i = 1; i <= n; ++i)
    if (in[i] != i && !visit[i]) calc(i);
  for (int i = 1; i <= n; ++i)
    if (in[i] != i && !visit[i]) calc(i);
  for (; G[2].size() && G[3].size();) {
    ++c;
    u = G[2].back(), t = 2;
    for (int j = 1; j <= t; ++j) {
      a[t - j + 1] = E[u].back();
      E[u].pop_back();
    }
    b[1] = a[t];
    for (int j = 2; j <= t; ++j) b[j] = a[j - 1];
    for (int j = 1; j <= t; ++j) H[c].push_back(make_pair(a[j], b[j]));
    u = G[3].back(), t = 3;
    for (int j = 1; j <= t; ++j) {
      a[t - j + 1] = E[u].back();
      E[u].pop_back();
    }
    b[1] = a[t];
    for (int j = 2; j <= t; ++j) b[j] = a[j - 1];
    for (int j = 1; j <= t; ++j) H[c].push_back(make_pair(a[j], b[j]));
    G[2].pop_back(), G[3].pop_back();
  }
  for (; G[2].size();) {
    ++c;
    u = G[2].back();
    G[2].pop_back();
    t = 2;
    for (int j = 1; j <= t; ++j) {
      a[t - j + 1] = E[u].back();
      E[u].pop_back();
    }
    b[1] = a[t];
    for (int j = 2; j <= t; ++j) b[j] = a[j - 1];
    for (int j = 1; j <= t; ++j) H[c].push_back(make_pair(a[j], b[j]));
    if (!G[2].size()) break;
    u = G[2].back();
    G[2].pop_back();
    t = 2;
    for (int j = 1; j <= t; ++j) {
      a[t - j + 1] = E[u].back();
      E[u].pop_back();
    }
    b[1] = a[t];
    for (int j = 2; j <= t; ++j) b[j] = a[j - 1];
    for (int j = 1; j <= t; ++j) H[c].push_back(make_pair(a[j], b[j]));
  }
  for (; G[3].size() >= 3;) {
    u = G[3].back();
    G[3].pop_back();
    v = G[3].back();
    G[3].pop_back();
    t = G[3].back();
    G[3].pop_back();
    ++c;
    for (int j = 1; j <= 3; ++j) {
      a[3 - j + 1] = E[u].back();
      E[u].pop_back();
    }
    b[1] = a[3];
    for (int j = 2; j <= 3; ++j) b[j] = a[j - 1];
    for (int j = 1; j <= 3; ++j) H[c].push_back(make_pair(a[j], b[j]));
    ++c;
    for (int j = 1; j <= 3; ++j) {
      a[3 - j + 1] = E[v].back();
      E[v].pop_back();
    }
    b[1] = a[3];
    for (int j = 2; j <= 3; ++j) b[j] = a[j - 1];
    for (int j = 1; j <= 3; ++j) H[c].push_back(make_pair(a[j], b[j]));
    for (int j = 1; j <= 3; ++j) {
      a[3 - j + 1] = E[t].back();
      E[t].pop_back();
    }
    H[c - 1].push_back(make_pair(a[2], a[3]));
    H[c - 1].push_back(make_pair(a[3], a[2]));
    H[c].push_back(make_pair(a[1], a[3]));
    H[c].push_back(make_pair(a[3], a[1]));
  }
  for (; G[3].size();) {
    ++c;
    u = G[3].back();
    G[3].pop_back();
    t = 3;
    for (int j = 1; j <= t; ++j) {
      a[t - j + 1] = E[u].back();
      E[u].pop_back();
    }
    b[1] = a[t];
    for (int j = 2; j <= t; ++j) b[j] = a[j - 1];
    for (int j = 1; j <= t; ++j) H[c].push_back(make_pair(a[j], b[j]));
  }
  printf("%d\n", c);
  for (int i = 1; i <= c; ++i) {
    printf("%d\n", H[i].size());
    for (int j = 0; j < H[i].size(); ++j)
      printf("%d%c", H[i][j].first, j + 1 < H[i].size() ? ' ' : '\n');
    for (int j = 0; j < H[i].size(); ++j)
      printf("%d%c", H[i][j].second, j + 1 < H[i].size() ? ' ' : '\n');
  }
  return 0;
}
