#include <bits/stdc++.h>
using namespace std;
vector<vector<int> > two, thr;
int n, sum, a[100010], pos[100010], ans[2][100010][8];
bool f[100010];
void work(vector<int> now) {
  while (1) {
    if (now.size() == 2) {
      two.push_back(now);
      return;
    }
    if (now.size() == 3) {
      thr.push_back(now);
      return;
    }
    if (now.size() <= 5) {
      sum++;
      ans[0][sum][0] = now.size();
      for (int i = 0; i < now.size(); i++) {
        ans[0][sum][i + 1] = pos[now[i]];
        ans[1][sum][i + 1] = i == 0 ? pos[now.back()] : pos[now[i - 1]];
      }
      return;
    }
    int b[10];
    for (int i = 1; i <= 5; i++) {
      b[i] = now.back();
      now.pop_back();
    }
    sum++;
    ans[0][sum][0] = 5;
    for (int i = 5; i; i--) {
      ans[0][sum][6 - i] = pos[b[i]];
      ans[1][sum][6 - i] = i == 5 ? pos[b[1]] : pos[b[i + 1]];
    }
    pos[b[1]] = pos[b[5]];
    now.push_back(b[1]);
  }
}
void out() {
  printf("%d\n", sum);
  for (int i = 1; i <= sum; i++) {
    printf("%d\n", ans[0][i][0]);
    for (int j = 1; j < ans[0][i][0]; j++) printf("%d ", ans[1][i][j]);
    printf("%d\n", ans[1][i][ans[0][i][0]]);
    for (int j = 1; j < ans[0][i][0]; j++) printf("%d ", ans[0][i][j]);
    printf("%d\n", ans[0][i][ans[0][i][0]]);
  }
}
void sol() {
  for (int i = 1; i <= n; i++)
    if (i != a[i] && !f[i]) {
      vector<int> tmp;
      for (int j = a[i]; j != i; j = a[j]) {
        tmp.push_back(j);
        f[j] = true;
      }
      tmp.push_back(i);
      f[i] = true;
      if (tmp.size() == 2)
        two.push_back(tmp);
      else if (tmp.size() == 3)
        thr.push_back(tmp);
      else
        work(tmp);
    }
  while (!two.empty() && !thr.empty()) {
    sum++;
    ans[0][sum][0] = 5;
    for (int i = 0; i < two.back().size(); i++) {
      ans[0][sum][i + 1] = pos[two.back()[i]];
      ans[1][sum][i + 1] =
          i == 0 ? pos[two.back().back()] : pos[two.back()[i - 1]];
    }
    for (int i = 0; i < thr.back().size(); i++) {
      ans[0][sum][i + 3] = pos[thr.back()[i]];
      ans[1][sum][i + 3] =
          i == 0 ? pos[thr.back().back()] : pos[thr.back()[i - 1]];
    }
    two.pop_back(), thr.pop_back();
  }
  while (!thr.empty()) {
    if (thr.size() >= 3) {
      sum++;
      ans[0][sum][0] = 5;
      for (int i = 0; i < thr.back().size(); i++) {
        ans[0][sum][i + 1] = pos[thr.back()[i]];
        ans[1][sum][i + 1] =
            i == 0 ? pos[thr.back().back()] : pos[thr.back()[i - 1]];
      }
      thr.pop_back();
      for (int i = 0; i < 2; i++) {
        ans[0][sum][i + 4] = pos[thr.back()[i]];
        ans[1][sum][i + 4] = i == 0 ? pos[thr.back()[1]] : pos[thr.back()[0]];
      }
      sum++;
      ans[0][sum][0] = 5;
      ans[0][sum][1] = pos[thr.back()[0]];
      ans[0][sum][2] = pos[thr.back()[2]];
      ans[1][sum][1] = pos[thr.back()[2]];
      ans[1][sum][2] = pos[thr.back()[0]];
      thr.pop_back();
      for (int i = 0; i < thr.back().size(); i++) {
        ans[0][sum][i + 3] = pos[thr.back()[i]];
        ans[1][sum][i + 3] =
            i == 0 ? pos[thr.back().back()] : pos[thr.back()[i - 1]];
      }
      thr.pop_back();
      continue;
    }
    sum++;
    ans[0][sum][0] = 3;
    for (int i = 0; i < thr.back().size(); i++) {
      ans[0][sum][i + 1] = pos[thr.back()[i]];
      ans[1][sum][i + 1] =
          i == 0 ? pos[thr.back().back()] : pos[thr.back()[i - 1]];
    }
    thr.pop_back();
  }
  while (!two.empty()) {
    if (two.size() == 1) {
      sum++;
      ans[0][sum][0] = 2;
      for (int i = 0; i < two.back().size(); i++) {
        ans[0][sum][i + 1] = pos[two.back()[i]];
        ans[1][sum][i + 1] =
            i == 0 ? pos[two.back().back()] : pos[two.back()[i - 1]];
      }
      break;
    }
    sum++;
    ans[0][sum][0] = 4;
    for (int i = 0; i < two.back().size(); i++) {
      ans[0][sum][i + 1] = pos[two.back()[i]];
      ans[1][sum][i + 1] =
          i == 0 ? pos[two.back().back()] : pos[two.back()[i - 1]];
    }
    two.pop_back();
    for (int i = 0; i < two.back().size(); i++) {
      ans[0][sum][i + 3] = pos[two.back()[i]];
      ans[1][sum][i + 3] =
          i == 0 ? pos[two.back().back()] : pos[two.back()[i - 1]];
    }
    two.pop_back();
  }
  out();
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]), pos[a[i]] = i;
  sol();
  return 0;
}
