#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
int N = 1e5 + 7;
void swap(char *p, char *q) {
  char temp = *p;
  *p = *q;
  *q = temp;
  return;
}
long long int powxy(long long int x, long long int y) {
  if (y == 0) return 1;
  if (y % 2 == 1) return (x * powxy(x, y - 1)) % MOD;
  long long int t = powxy(x, y / 2) % MOD;
  return (t * t) % MOD;
}
int main() {
  int n;
  cin >> n;
  int a[n], b[n];
  int v[100001];
  vector<int> res[100001];
  for (int i = 0; i < n; i++) {
    cin >> a[i];
    b[i] = a[i];
  }
  sort(b, b + n);
  map<int, int> m;
  for (int i = 0; i < n; i++) m[b[i]] = i;
  int k = 0;
  for (int i = 0; i < n; i++) {
    if (v[i] == 0) {
      int cur = i;
      while (v[cur] == 0) {
        v[cur] = 1;
        res[k].push_back(cur + 1);
        cur = m[a[cur]];
      }
      sort(res[k].begin(), res[k].end());
      k++;
    }
  }
  cout << k << "\n";
  for (int i = 0; i < k; i++) {
    cout << res[i].size() << " ";
    for (int j = 0; j < res[i].size(); j++) cout << res[i][j] << " ";
    cout << "\n";
  }
  return 0;
}
