#include <bits/stdc++.h>
using namespace std;
struct switchs {
  int len;
  vector<int> way;
} s[200050];
int cnt, cnt3, cnt2, cnt4, multi;
int ps3[100050], ps2[100050], ps4[100050], mul[50050];
int n, seq[100050];
bool vis[100050];
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; ++i) scanf("%d", &seq[i]);
  for (int i = 1; i <= n; ++i) {
    if (!vis[i] && seq[i] != i) {
      vis[i] = 1;
      cnt++;
      s[cnt].way.push_back(i);
      s[cnt].len++;
      int tmp = seq[i];
      while (!vis[tmp]) {
        s[cnt].way.push_back(tmp);
        s[cnt].len++;
        vis[tmp] = 1;
        tmp = seq[tmp];
      }
      if (s[cnt].len == 2) ps2[++cnt2] = cnt;
      if (s[cnt].len == 3) ps3[++cnt3] = cnt;
      if (s[cnt].len == 4) ps4[++cnt4] = cnt;
      if (s[cnt].len > 4) mul[++multi] = cnt;
    }
  }
  long long ans = 0;
  int tmp3 = cnt3, tmp2 = cnt2;
  for (int i = 1; i <= multi; ++i) {
    int tmp = s[mul[i]].len;
    while (tmp > 5) {
      tmp -= 4;
      ans++;
    }
    if (tmp == 5) ans++;
    if (tmp == 2) tmp2++;
    if (tmp == 4) ans++;
    if (tmp == 3) tmp3++;
  }
  ans += cnt4;
  if (tmp2 == 0 && tmp3 >= 2) {
    tmp3 -= 2;
    tmp2++;
    ans++;
  }
  while (tmp3 != 0 && tmp2 != 0) {
    tmp3--;
    tmp2--;
    ans++;
    if (tmp2 == 0 && tmp3 >= 2) {
      tmp2++;
      tmp3 -= 2;
      ans++;
    }
  }
  ans += tmp3;
  ans += tmp2 / 2 + tmp2 % 2;
  printf("%lld\n", ans);
  for (int i = 1; i <= multi; ++i) {
    int tmp = s[mul[i]].len;
    int ps = 0;
    while (tmp > 5) {
      tmp -= 4;
      printf("5\n");
      printf("%d ", s[mul[i]].way[0]);
      for (int j = 1; j <= 4; ++j) printf("%d ", s[mul[i]].way[++ps]);
      printf("\n");
      printf("%d %d %d %d %d\n", s[mul[i]].way[ps - 3], s[mul[i]].way[ps - 2],
             s[mul[i]].way[ps - 1], s[mul[i]].way[ps], s[mul[i]].way[0]);
    }
    if (tmp == 5) {
      printf("5\n");
      printf("%d ", s[mul[i]].way[0]);
      for (int j = 1; j <= 4; ++j) printf("%d ", s[mul[i]].way[++ps]);
      printf("\n");
      printf("%d %d %d %d %d\n", s[mul[i]].way[ps - 3], s[mul[i]].way[ps - 2],
             s[mul[i]].way[ps - 1], s[mul[i]].way[ps], s[mul[i]].way[0]);
    } else if (tmp == 4) {
      printf("4\n");
      printf("%d ", s[mul[i]].way[0]);
      for (int j = 1; j <= 3; ++j) printf("%d ", s[mul[i]].way[++ps]);
      printf("\n");
      printf("%d %d %d %d\n", s[mul[i]].way[ps - 2], s[mul[i]].way[ps - 1],
             s[mul[i]].way[ps], s[mul[i]].way[0]);
    } else if (tmp == 3) {
      s[++cnt].len = 3;
      ps3[++cnt3] = cnt;
      s[cnt].way.push_back(s[mul[i]].way[0]);
      s[cnt].way.push_back(s[mul[i]].way[++ps]);
      s[cnt].way.push_back(s[mul[i]].way[++ps]);
    } else {
      s[++cnt].len = 2;
      ps2[++cnt2] = cnt;
      s[cnt].way.push_back(s[mul[i]].way[0]);
      s[cnt].way.push_back(s[mul[i]].way[++ps]);
    }
  }
  for (int i = 1; i <= cnt4; ++i) {
    printf("4\n");
    printf("%d %d %d %d\n", s[ps4[i]].way[0], s[ps4[i]].way[1],
           s[ps4[i]].way[2], s[ps4[i]].way[3]);
    printf("%d %d %d %d\n", s[ps4[i]].way[1], s[ps4[i]].way[2],
           s[ps4[i]].way[3], s[ps4[i]].way[0]);
  }
  if (cnt2 == 0 && cnt3 >= 2) {
    printf("5\n");
    printf("%d %d %d %d %d\n", s[ps3[cnt3]].way[0], s[ps3[cnt3]].way[1],
           s[ps3[cnt3]].way[2], s[ps3[cnt3 - 1]].way[0],
           s[ps3[cnt3 - 1]].way[1]);
    printf("%d %d %d %d %d\n", s[ps3[cnt3]].way[1], s[ps3[cnt3]].way[2],
           s[ps3[cnt3]].way[0], s[ps3[cnt3 - 1]].way[1],
           s[ps3[cnt3 - 1]].way[0]);
    s[++cnt].len = 2;
    cnt3--;
    s[cnt].way.push_back(s[ps3[cnt3]].way[0]);
    s[cnt].way.push_back(s[ps3[cnt3]].way[2]);
    cnt3--;
    ps2[++cnt2] = cnt;
  }
  while (cnt3 != 0 && cnt2 != 0) {
    printf("5\n");
    printf("%d %d %d %d %d\n", s[ps2[cnt2]].way[0], s[ps2[cnt2]].way[1],
           s[ps3[cnt3]].way[0], s[ps3[cnt3]].way[1], s[ps3[cnt3]].way[2]);
    printf("%d %d %d %d %d\n", s[ps2[cnt2]].way[1], s[ps2[cnt2]].way[0],
           s[ps3[cnt3]].way[1], s[ps3[cnt3]].way[2], s[ps3[cnt3]].way[0]);
    cnt3--;
    cnt2--;
    if (cnt2 == 0 && cnt3 >= 2) {
      printf("5\n");
      printf("%d %d %d %d %d\n", s[ps3[cnt3]].way[0], s[ps3[cnt3]].way[1],
             s[ps3[cnt3]].way[2], s[ps3[cnt3 - 1]].way[0],
             s[ps3[cnt3 - 1]].way[1]);
      printf("%d %d %d %d %d\n", s[ps3[cnt3]].way[1], s[ps3[cnt3]].way[2],
             s[ps3[cnt3]].way[0], s[ps3[cnt3 - 1]].way[1],
             s[ps3[cnt3 - 1]].way[0]);
      s[++cnt].len = 2;
      cnt3--;
      s[cnt].way.push_back(s[ps3[cnt3]].way[0]);
      s[cnt].way.push_back(s[ps3[cnt3]].way[2]);
      cnt3--;
      ps2[++cnt2] = cnt;
    }
  }
  for (int i = 1; i <= cnt3; ++i) {
    printf("3\n");
    printf("%d %d %d\n", s[ps3[i]].way[0], s[ps3[i]].way[1], s[ps3[i]].way[2]);
    printf("%d %d %d\n", s[ps3[i]].way[1], s[ps3[i]].way[2], s[ps3[i]].way[0]);
  }
  while (cnt2 > 1) {
    printf("4\n");
    printf("%d %d %d %d\n", s[ps2[cnt2]].way[0], s[ps2[cnt2]].way[1],
           s[ps2[cnt2 - 1]].way[0], s[ps2[cnt2 - 1]].way[1]);
    printf("%d %d %d %d\n", s[ps2[cnt2]].way[1], s[ps2[cnt2]].way[0],
           s[ps2[cnt2 - 1]].way[1], s[ps2[cnt2 - 1]].way[0]);
    cnt2 -= 2;
  }
  for (int i = 1; i <= cnt2; ++i) {
    printf("2\n");
    printf("%d %d\n", s[ps2[i]].way[0], s[ps2[i]].way[1]);
    printf("%d %d\n", s[ps2[i]].way[1], s[ps2[i]].way[0]);
  }
  return 0;
}
