#include <bits/stdc++.h>
using namespace std;
map<int, int> p, ind;
set<int> vis;
vector<vector<int> > ans;
void dfs(int x) {
  if (vis.count(x)) return;
  vis.insert(x);
  ans.back().push_back(ind[x]);
  dfs(p[x]);
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int n;
  cin >> n;
  vector<int> a(n);
  for (int i = 0; i < (int)(n); i++) cin >> a[i];
  for (int i = 0; i < (int)(n); i++) ind[a[i]] = i;
  auto b = a;
  sort((b).begin(), (b).end());
  for (int i = 0; i < (int)(n); i++) p[b[i]] = a[i];
  for (int i = 0; i < (int)(n); i++)
    if (!vis.count(a[i])) {
      ans.emplace_back(vector<int>());
      dfs(a[i]);
    }
  cout << ((int)(ans).size()) << '\n';
  for (auto &line : ans) {
    cout << ((int)(line).size());
    for (auto x : line) cout << ' ' << x + 1;
    cout << '\n';
  }
  return 0;
}
