#include <bits/stdc++.h>
#define FOR(i, a, b) for (int i = a; i <= b; ++i)
#define FORD(i, a, b) for (int i = a; i >= b; --i)
#define ll long long
using namespace std;
const int N = 1e5 + 5;
int n, pile[N], pre[N];
struct Item {
int a, b, idx;
bool operator < (const Item &ot) const {
if (a != ot.a) return a < ot.a;
return b > ot.b;
}
} Box[N];
void nhap() {
cin >> n;
FOR(i, 1, n) cin >> Box[i].a >> Box[i].b, Box[i].idx = i;
}
void giai() {
sort(Box + 1, Box + 1 + n);
multiset <pair <int, int>> S;
vector <int> top;
FOR(i, 1, n) {
auto [a, b, idx] = Box[i];
auto it = S.lower_bound({b, -1});
if (it == S.begin()) {
top.push_back(idx);
pile[idx] = top.size();
pre[idx] = -1;
S.insert({b, pile[idx]});
}
else {
--it;
int pid = it -> second;
S.erase(it);
S.insert({b, pid});
pre[idx] = top[pid - 1];
pile[i] = pid;
top[pid - 1] = idx;
}
}
cout << top.size() << '\n';
for (int x : top) {
vector <int> res;
int cur = x;
while (cur != -1) {
res.push_back(cur);
cur = pre[cur];
}
cout << res.size() << ' ';
for (int i : res) cout << i << ' ';
cout << '\n';
}
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
#define name "test"
if (fopen(name".inp", "r")) {
freopen(name".inp", "r", stdin);
freopen(name".out", "w", stdout);
}
nhap();
giai();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIEZPUihpLCBhLCBiKSBmb3IgKGludCBpID0gYTsgaSA8PSBiOyArK2kpCiNkZWZpbmUgRk9SRChpLCBhLCBiKSBmb3IgKGludCBpID0gYTsgaSA+PSBiOyAtLWkpCiNkZWZpbmUgbGwgbG9uZyBsb25nCgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY29uc3QgaW50IE4gPSAxZTUgKyA1OwppbnQgbiwgcGlsZVtOXSwgcHJlW05dOwoKc3RydWN0IEl0ZW0gewogICAgaW50IGEsIGIsIGlkeDsKICAgIGJvb2wgb3BlcmF0b3IgPCAoY29uc3QgSXRlbSAmb3QpIGNvbnN0IHsKICAgICAgICBpZiAoYSAhPSBvdC5hKSByZXR1cm4gYSA8IG90LmE7CiAgICAgICAgcmV0dXJuIGIgPiBvdC5iOwogICAgfQp9IEJveFtOXTsKCnZvaWQgbmhhcCgpIHsKICAgIGNpbiA+PiBuOwogICAgRk9SKGksIDEsIG4pIGNpbiA+PiBCb3hbaV0uYSA+PiBCb3hbaV0uYiwgQm94W2ldLmlkeCA9IGk7Cn0KCnZvaWQgZ2lhaSgpIHsKICAgIHNvcnQoQm94ICsgMSwgQm94ICsgMSArIG4pOwogICAgbXVsdGlzZXQgPHBhaXIgPGludCwgaW50Pj4gUzsKICAgIHZlY3RvciA8aW50PiB0b3A7CiAgICBGT1IoaSwgMSwgbikgewogICAgICAgIGF1dG8gW2EsIGIsIGlkeF0gPSBCb3hbaV07CiAgICAgICAgYXV0byBpdCA9IFMubG93ZXJfYm91bmQoe2IsIC0xfSk7CgogICAgICAgIGlmIChpdCA9PSBTLmJlZ2luKCkpIHsKICAgICAgICAgICAgdG9wLnB1c2hfYmFjayhpZHgpOwogICAgICAgICAgICBwaWxlW2lkeF0gPSB0b3Auc2l6ZSgpOwogICAgICAgICAgICBwcmVbaWR4XSA9IC0xOwogICAgICAgICAgICBTLmluc2VydCh7YiwgcGlsZVtpZHhdfSk7CiAgICAgICAgfQoKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgLS1pdDsKICAgICAgICAgICAgaW50IHBpZCA9IGl0IC0+IHNlY29uZDsKICAgICAgICAgICAgUy5lcmFzZShpdCk7CiAgICAgICAgICAgIFMuaW5zZXJ0KHtiLCBwaWR9KTsKICAgICAgICAgICAgcHJlW2lkeF0gPSB0b3BbcGlkIC0gMV07CiAgICAgICAgICAgIHBpbGVbaV0gPSBwaWQ7CiAgICAgICAgICAgIHRvcFtwaWQgLSAxXSA9IGlkeDsKICAgICAgICB9CiAgICB9CgogICAgY291dCA8PCB0b3Auc2l6ZSgpIDw8ICdcbic7CiAgICBmb3IgKGludCB4IDogdG9wKSB7CiAgICAgICAgdmVjdG9yIDxpbnQ+IHJlczsKICAgICAgICBpbnQgY3VyID0geDsKICAgICAgICB3aGlsZSAoY3VyICE9IC0xKSB7CiAgICAgICAgICAgIHJlcy5wdXNoX2JhY2soY3VyKTsKICAgICAgICAgICAgY3VyID0gcHJlW2N1cl07CiAgICAgICAgfQogICAgICAgIGNvdXQgPDwgcmVzLnNpemUoKSA8PCAnICc7CiAgICAgICAgZm9yIChpbnQgaSA6IHJlcykgY291dCA8PCBpIDw8ICcgJzsKICAgICAgICBjb3V0IDw8ICdcbic7CiAgICB9Cn0KCmludCBtYWluKCkgewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsKICAgIGNpbi50aWUoMCk7IGNvdXQudGllKDApOwoKICAgICNkZWZpbmUgbmFtZSAidGVzdCIKCiAgICBpZiAoZm9wZW4obmFtZSIuaW5wIiwgInIiKSkgewogICAgICAgIGZyZW9wZW4obmFtZSIuaW5wIiwgInIiLCBzdGRpbik7CiAgICAgICAgZnJlb3BlbihuYW1lIi5vdXQiLCAidyIsIHN0ZG91dCk7CiAgICB9CgogICAgbmhhcCgpOwogICAgZ2lhaSgpOwoKICAgIHJldHVybiAwOwp9Cg==