#include <bits/stdc++.h>
using namespace std;
int o[6][100005][6], L[6], e[6], f[6], g[6], a[100005], c, n;
bool b[100005];
void put(int x, int y) {
  for (int i = 1; i <= x; i++)
    f[++c] = o[x][y][i], g[(i < 2 ? c + x : c) - 1] = f[c];
}
void prt() {
  printf("%d\n", c);
  for (int i = 1; i <= c; i++) printf("%d%s", f[i], i < c ? " " : "\n");
  for (int i = 1; i <= c; i++) printf("%d%s", g[i], i < c ? " " : "\n");
  c = 0;
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
  for (int i = 1; i <= n; i++)
    while (!b[i]) {
      int j = a[i];
      e[c = 1] = i;
      for (; j != i && c < 5; j = a[j]) e[++c] = j, b[j] = 1;
      b[i] = j == i;
      a[i] = j;
      memcpy(o[c][++L[c]], e, sizeof(e));
    }
  while (L[3] > L[2] + 2)
    o[2][++L[2]][1] = o[3][L[3]][2], o[2][L[2]][2] = o[3][L[3]][3],
    o[2][++L[2]][1] = o[3][L[3]][1], o[2][L[2]][2] = o[3][L[3]][2], L[3]--;
  int j = 1, ans = L[2] - L[3] + 1;
  ans = ans < 0 ? 0 : ans / 2;
  ans += L[5] + L[4] + L[3];
  printf("%d\n", ans), c = 0;
  for (int i = 1; i <= L[5]; i++) put(5, i), prt();
  for (int i = 1; i <= L[4]; i++) put(4, i), prt();
  for (int i = 1; i <= L[3]; i++) {
    put(3, i);
    if (j <= L[2]) put(2, j), j++;
    prt();
  }
  while (j <= L[2]) {
    put(2, j), j++;
    if (j <= L[2]) put(2, j), j++;
    prt();
  }
  return 0;
}
