#include <bits/stdc++.h>
using namespace std;
int main(int argc, char** argv) {
  int n;
  int ar[100010];
  int cyc[100010];
  int s1 = 0;
  cin >> n;
  for (int i = 0; i < n; ++i) {
    cin >> ar[i];
    cyc[i] = 0;
  }
  int cur = 0, s = 0, res = 0, n2 = 0, n3 = 0;
  for (int i = 0; i < n; ++i) {
    if (cyc[i] == 0) {
      s = 1;
      cur = ar[i];
      while (ar[cur - 1] != ar[i]) {
        ++s;
        cyc[cur - 1] = -1;
        cur = ar[cur - 1];
      }
      cyc[cur - 1] = -1;
      cyc[i] = s;
      res += s / 4;
      if (s % 4 == 2) ++n2;
      if (s % 4 == 3) ++n3;
    }
  }
  int m = n2 > n3 ? n3 : n2;
  res += m + (n2 - m) / 2 + (n2 - m) % 2 + ((n3 - m) / 3) * 2 + (n3 - m) % 3;
  cout << res << endl;
  int rar[5];
  bool b5 = false;
  for (int i = 0; i < n; ++i) {
    while (cyc[i] >= 4) {
      ++s1;
      b5 = cyc[i] > 4;
      cout << 4 + b5 << endl;
      cout << i + 1;
      int next = ar[i];
      for (int j = 0; j < 3 + b5; ++j) {
        cout << " " << next;
        rar[j] = next;
        next = ar[next - 1];
      }
      rar[3 + b5] = i + 1;
      ar[i] = next;
      cout << endl;
      cyc[i] -= 4;
      for (int j = 0; j < 3 + b5; ++j) cout << rar[j] << " ";
      cout << rar[3 + b5] << endl;
    }
  }
  int i = 0;
  int last2 = 0, last3 = 0;
  while ((n2 && n3) || (n2 > 1) || (n3 > 1)) {
    while (n2 && n3) {
      ++s1;
      cout << 5 << endl;
      for (i = last2; cyc[i] != 2; ++i)
        ;
      last2 = i + 1;
      cyc[i] = 0;
      cout << i + 1 << " ";
      rar[1] = i + 1;
      cout << ar[i] << " ";
      rar[0] = ar[i];
      --n2;
      for (i = last3; cyc[i] != 3; ++i)
        ;
      last3 = i + 1;
      cyc[i] = 0;
      cout << i + 1 << " ";
      rar[4] = i + 1;
      int q = ar[i];
      cout << q << " ";
      rar[2] = q;
      q = ar[q - 1];
      cout << q << endl;
      rar[3] = q;
      --n3;
      for (int j = 0; j < 4; ++j) cout << rar[j] << " ";
      cout << rar[4] << endl;
    }
    while (n2 > 1) {
      ++s1;
      cout << 4 << endl;
      for (i = last2; cyc[i] != 2; ++i)
        ;
      last2 = i + 1;
      cyc[i] = 0;
      cout << i + 1 << " ";
      rar[1] = i + 1;
      cout << ar[i] << " ";
      rar[0] = ar[i];
      --n2;
      for (i = last2; cyc[i] != 2; ++i)
        ;
      last2 = i + 1;
      cyc[i] = 0;
      cout << i + 1 << " ";
      rar[3] = i + 1;
      cout << ar[i] << endl;
      rar[2] = ar[i];
      for (int j = 0; j < 3; ++j) cout << rar[j] << " ";
      cout << rar[3] << endl;
      --n2;
    }
    if (n3 > 1) {
      ++s1;
      cout << 5 << endl;
      for (i = last3; cyc[i] != 3; ++i)
        ;
      last3 = i + 1;
      cyc[i] = 0;
      cout << i + 1 << " ";
      rar[2] = i + 1;
      int q = ar[i];
      cout << q << " ";
      rar[0] = q;
      q = ar[q - 1];
      cout << q << " ";
      rar[1] = q;
      --n3;
      for (i = last3; cyc[i] != 3; ++i)
        ;
      last3 = i + 1;
      last2 = last2 > i ? i : last2;
      cout << i + 1 << " ";
      rar[4] = i + 1;
      cout << ar[i] << endl;
      rar[3] = ar[i];
      int tt = ar[i];
      ar[i] = ar[ar[i] - 1];
      ar[tt - 1] = tt;
      cyc[i] = 2;
      ++n2;
      --n3;
      for (int j = 0; j < 4; ++j) cout << rar[j] << " ";
      cout << rar[4] << endl;
    }
  }
  if (n2) {
    ++s1;
    cout << 2 << endl;
    for (i = last2; cyc[i] != 2; ++i)
      ;
    cyc[i] = 0;
    cout << i + 1 << " ";
    rar[1] = i + 1;
    cout << ar[i] << endl;
    rar[0] = ar[i];
    cout << rar[0] << " ";
    cout << rar[1] << endl;
  }
  if (n3) {
    ++s1;
    cout << 3 << endl;
    for (i = last3; cyc[i] != 3; ++i)
      ;
    cyc[i] = 0;
    cout << i + 1 << " ";
    rar[2] = i + 1;
    int q = ar[i];
    cout << q << " ";
    rar[0] = q;
    q = ar[q - 1];
    cout << q << endl;
    rar[1] = q;
    cout << rar[0] << " ";
    cout << rar[1] << " ";
    cout << rar[2];
    --n3;
  }
  return 0;
}
