#include <bits/stdc++.h>
using namespace std;
const int maxn = 100010;
bool visit[maxn];
int ansll[maxn], anss1[maxn][6], anss2[maxn][6], id[maxn], size[maxn],
    pos[maxn];
int ans1[6], ans2[6], a[maxn], n, m, pos2[maxn], pos3[maxn];
int anslen, ansl, len2, len3;
bool cmp(const int i, const int j) { return size[i] < size[j]; }
int getmin(int i, int J) {
  if (i < J) return i;
  return J;
}
int getmax(int i, int J) {
  if (i < J) return J;
  return i;
}
void add() {
  ansll[++anslen] = ansl;
  for (int i = 1; i <= ansl; i++) anss1[anslen][i] = ans1[i];
  for (int i = 1; i <= ansl; i++) anss2[anslen][i] = ans2[i];
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
  for (int i = 1; i <= n; i++) {
    if (!visit[i]) {
      int len = 0;
      for (int p = i; !visit[p]; p = a[p]) visit[p] = 1, ++len;
      size[++m] = len, pos[m] = i, id[m] = m;
    }
  }
  sort(id + 1, id + m + 1, cmp);
  for (int k = m; k >= 1; k--) {
    int i = id[k];
    if (size[i] > 5) {
      while (size[i] > 5) {
        int j = pos[i];
        ansl = 0;
        for (int p = 1; p <= 5; p++)
          ans1[++ansl] = j, ans2[ansl] = a[j], j = a[j];
        ans2[ansl] = ans1[1];
        pos[i] = ans1[1];
        add();
        a[ans1[1]] = a[ans1[ansl]];
        size[i] -= 4;
      }
    }
    if (size[i] == 4 || size[i] == 5) {
      int j = pos[i];
      ansl = 0;
      for (int p = 1; p <= size[i]; p++)
        ans1[++ansl] = j, ans2[ansl] = a[j], j = a[j];
      ans2[ansl] = j;
      pos[i] = j;
      add();
    } else {
      if (size[i] == 3) pos3[++len3] = pos[i];
      if (size[i] == 2) pos2[++len2] = pos[i];
    }
  }
  for (int k = 1; k <= getmin(len2, len3); k++) {
    int i = pos2[k], j = pos3[k];
    ansl = 0;
    for (int p = 1; p <= 2; p++) ans1[++ansl] = i, ans2[ansl] = a[i], i = a[i];
    for (int p = 1; p <= 3; p++) ans1[++ansl] = j, ans2[ansl] = a[j], j = a[j];
    add();
  }
  if (len2 > len3) {
    for (int k = len3 + 1; k <= len2;) {
      if (len2 - k + 1 == 1) {
        int i = pos2[k];
        ansl = 0;
        for (int p = 1; p <= 2; p++)
          ans1[++ansl] = i, ans2[ansl] = a[i], i = a[i];
        add();
        k = len2 + 1;
      } else {
        int i = pos2[k];
        ansl = 0;
        for (int p = 1; p <= 2; p++)
          ans1[++ansl] = i, ans2[ansl] = a[i], i = a[i];
        i = pos2[k + 1];
        for (int p = 1; p <= 2; p++)
          ans1[++ansl] = i, ans2[ansl] = a[i], i = a[i];
        add();
        k += 2;
      }
    }
  }
  if (len3 > len2) {
    for (int k = len2 + 1; k <= len3;) {
      if (len3 - k + 1 == 1) {
        int i = pos3[k];
        ansl = 0;
        for (int p = 1; p <= 3; p++)
          ans1[++ansl] = i, ans2[ansl] = a[i], i = a[i];
        add();
        k = len3 + 1;
      } else if (len3 - k + 1 == 2) {
        int i = pos3[k];
        ansl = 0;
        for (int p = 1; p <= 3; p++)
          ans1[++ansl] = i, ans2[ansl] = a[i], i = a[i];
        add();
        i = pos3[k + 1];
        ansl = 0;
        for (int p = 1; p <= 3; p++)
          ans1[++ansl] = i, ans2[ansl] = a[i], i = a[i];
        add();
        k = len3 + 1;
      } else {
        int i = pos3[k], j, ii = a[i];
        ansl = 0;
        ans1[++ansl] = i, ans2[ansl] = ii;
        ans1[++ansl] = ii, ans2[ansl] = i;
        j = pos3[k + 1];
        for (int p = 1; p <= 3; p++)
          ans1[++ansl] = j, ans2[ansl] = a[j], j = a[j];
        add();
        ii = a[ii];
        ansl = 0;
        ans1[++ansl] = i, ans2[ansl] = ii;
        ans1[++ansl] = ii, ans2[ansl] = i;
        j = pos3[k + 2];
        for (int p = 1; p <= 3; p++)
          ans1[++ansl] = j, ans2[ansl] = a[j], j = a[j];
        add();
        k += 3;
      }
    }
  }
  printf("%d\n", anslen);
  for (int i = 1; i <= anslen; i++) {
    printf("%d\n", ansll[i]);
    for (int j = 1; j <= ansll[i]; j++) printf("%d ", anss1[i][j]);
    printf("\n");
    for (int j = 1; j <= ansll[i]; j++) printf("%d ", anss2[i][j]);
    printf("\n");
  }
}
