#include <bits/stdc++.h>
using namespace std;
vector<int> vec;
vector<bool> us;
queue<int> q;
vector<queue<int> > vq;
void dfs(int v) {
  us[v] = true;
  q.push(v);
  if (!us[vec[v]]) {
    dfs(vec[v]);
  }
}
int main() {
  int n;
  cin >> n;
  int a[n];
  vec.resize(n);
  us.resize(n, false);
  map<int, int> m;
  for (int j = 0; j < n; j++) {
    cin >> a[j];
    m[a[j]] = j;
  }
  sort(a, a + n);
  for (int j = 0; j < n; j++) {
    vec[j] = m[a[j]];
  }
  for (int j = 0; j < n; j++) {
    if (!us[j]) {
      dfs(j);
      vq.push_back(q);
      while (!q.empty()) {
        q.pop();
      }
    }
  }
  cout << vq.size();
  for (int j = 0; j < vq.size(); j++) {
    cout << '\n' << vq[j].size() << ' ';
    while (!vq[j].empty()) {
      cout << vq[j].front() + 1 << " ";
      vq[j].pop();
    }
  }
}
