#include <bits/stdc++.h>
using namespace std;
const int u = 100010;
int a[u], b[u], e[u], f[u], s[u], v[u], n, m, p, i, j, k, num;
vector<int> c[u], d[u];
void dfs(int x) {
  v[x] = 1, s[++p] = x;
  if (!v[a[x]]) dfs(a[x]);
}
bool cmp(int x, int y) { return b[x] > b[y] || b[x] == b[y] && f[x] < f[y]; }
int main() {
  ios::sync_with_stdio(false);
  cin >> n;
  for (i = 1; i <= n; i++) cin >> a[i];
  for (i = 1; i <= n; i++)
    if (!v[i]) {
      p = 0, dfs(i);
      if (p == 1) continue;
      for (j = p; j >= 0; j -= 4 + (j == 5)) {
        b[++m] = min(j, 5), f[m] = ++num;
        for (k = 0; k < b[m]; k++) {
          c[m].push_back(s[j - k]);
          d[m].push_back(s[k == 0 ? j - b[m] + 1 : j - k + 1]);
        }
      }
    }
  for (i = 1; i <= m; i++) e[i] = i;
  sort(e + 1, e + m + 1, cmp);
  for (i = 1; i <= m; i++)
    for (; m > i && b[e[i]] + b[e[m]] <= 5; m--) {
      for (j = 0; j < b[e[m]]; j++)
        c[e[i]].push_back(c[e[m]][j]), d[e[i]].push_back(d[e[m]][j]);
      b[e[i]] += b[e[m]];
    }
  for (i = 1; i <= m && b[e[i]] > 3; i++)
    ;
  for (; b[e[m]] == 3 && i + 1 < m; m--, i += 2) {
    b[e[i]] += 2, b[e[i + 1]] += 2;
    c[e[i]].push_back(c[e[m]][1]), c[e[i]].push_back(c[e[m]][0]);
    d[e[i]].push_back(c[e[m]][0]), d[e[i]].push_back(c[e[m]][1]);
    c[e[i + 1]].push_back(c[e[m]][2]), c[e[i + 1]].push_back(c[e[m]][1]);
    d[e[i + 1]].push_back(c[e[m]][1]), d[e[i + 1]].push_back(c[e[m]][2]);
  }
  cout << m << "\n";
  for (i = 1; i <= m; i++) {
    cout << b[e[i]] << "\n";
    for (j = 0; j < b[e[i]]; j++) cout << c[e[i]][j] << ' ';
    cout << "\n";
    for (j = 0; j < b[e[i]]; j++) cout << d[e[i]][j] << ' ';
    cout << "\n";
  }
  return 0;
}
