#include <bits/stdc++.h>
using namespace std;
template <typename T, typename T1>
T amax(T &a, T1 b) {
  if (b > a) a = b;
  return a;
}
template <typename T, typename T1>
T amin(T &a, T1 b) {
  if (b < a) a = b;
  return a;
}
const int mod = 1e9 + 7;
const int N = 3e5 + 1;
vector<int> g[N];
int vis[N];
set<int> s[N];
void dfs(int u, int par) {
  vis[u] = 1;
  for (int v : g[u]) {
    if (vis[v]) {
      continue;
    }
    dfs(v, par);
  }
  s[par].insert(u);
}
void solve() {
  int n;
  cin >> n;
  map<int, int> aux;
  for (int i = 0; i < n; i++) {
    int x;
    cin >> x;
    aux[x] = i + 1;
  }
  int curr = 1;
  for (auto &it : aux) {
    g[it.second].push_back(curr);
    g[curr].push_back(it.second);
    curr++;
  }
  curr = 0;
  for (int i = 1; i < n + 1; i++) {
    if (!vis[i]) {
      dfs(i, curr);
      curr++;
    }
  }
  cout << curr << "\n";
  for (int i = 0; i < curr; i++) {
    cout << s[i].size() << " ";
    for (auto &it : s[i]) {
      cout << it << " ";
    }
    cout << "\n";
  }
}
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  int t = 1;
  while (t--) solve();
  return 0;
}
