#include <bits/stdc++.h>
using namespace std;
long long z = 1000000007;
long long gcd(long long a, long long b) {
  if (a == 0) return b;
  if (b == 0) return a;
  return gcd(b, a % b);
}
long long power(long long a, long long b) {
  long long res = 1;
  while (b) {
    if (b & 1) {
      res = (res * a);
      b--;
    } else {
      a = (a * a);
      b = b >> 1;
    }
  }
  return res;
}
vector<long long> v[100001], ans, ans1;
long long vis[100001] = {0}, ar[100001] = {0}, k = 0;
void bfs(long long root) {
  long long a;
  queue<long long> q;
  ar[root]++;
  q.push(root);
  set<long long> s;
  while (!q.empty()) {
    a = q.front();
    q.pop();
    s.insert(a);
    vis[a] = 1;
    for (long long i = 0; i < v[a].size(); i++) {
      if (!vis[v[a][i]] && !ar[v[a][i]]) {
        q.push(v[a][i]);
        ar[v[a][i]]++;
      }
    }
  }
  ans1.push_back(s.size());
  while (!s.empty()) {
    ans.push_back(*s.begin());
    s.erase(*s.begin());
  }
}
int32_t main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  long long t;
  t = 1;
  while (t--) {
    long long n;
    cin >> n;
    vector<pair<long long, long long> > v1, v2;
    long long x;
    for (long long i = 0; i < n; i++) {
      cin >> x;
      v1.push_back(make_pair(x, i + 1));
      v2.push_back(make_pair(x, i + 1));
    }
    sort(v2.begin(), v2.end());
    for (long long i = 0; i < n; i++) {
      v[v1[i].second].push_back(v2[i].second);
      v[v2[i].second].push_back(v1[i].second);
    }
    long long p = 0;
    for (long long i = 1; i <= n; i++) {
      if (!vis[i]) {
        p++;
        bfs(i);
      }
    }
    cout << p << "\n";
    long long q = 0;
    for (long long i = 0; i < ans1.size(); i++) {
      cout << ans1[i] << " ";
      for (long long j = q; j < ans1[i] + q; j++) {
        cout << ans[j] << " ";
      }
      q += ans1[i];
      cout << "\n";
    }
  }
}
