#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define fi first
#define se second
#define pub push_back
#define pob pop_back
#define mpa make_pair
#define endl '\n'
#define BIT(i) ((1 << i))
const int maxn = 1e5 + 10;
int n;
vector<int> nen;
pair<pair<int, int>, int> a[maxn];
bool cmp(pair<pair<int, int>, int> x, pair<pair<int, int>, int> y)
{
if(x.fi.fi == y.fi.fi) return x.fi.se > y.fi.se;
return x.fi.fi < y.fi.fi;
}
pair<int, int> seg[maxn * 4];
void update(int id, int l, int r, int x, int val, int cs)
{
if(l > x || r < x) return ;
if(l == r)
{
seg[id] = {val, cs};
return ;
}
int mid = l + r >> 1;
update(id << 1, l, mid, x, val, cs);
update(id << 1 | 1, mid + 1, r, x, val, cs);
seg[id] = max(seg[id << 1], seg[id << 1 | 1]);
}
pair<int, int> get(int id, int l, int r, int x, int y)
{
if(l > y || r < x) return {0, 0};
if(l >= x && r <= y) return seg[id];
int mid = l + r >> 1;
return max(get(id << 1, l, mid, x, y), get(id << 1 | 1, mid + 1, r, x, y));
}
int trace[maxn];
int vt[maxn];
int mp[maxn];
bool check[maxn];
vector<int> ans[maxn];
int bangnhau[maxn];
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
#define code code
// freopen("code.INP","r",stdin);
// freopen("code.OUT","w",stdout);
cin >> n;
nen.pub(-1e9);
for(int i=1; i<=n; i++)
{
int x, y;
cin >> x >> y;
a[i] = {{x, y}, i};
nen.pub(y);
}
sort(a + 1, a + n + 1, cmp);
sort(nen.begin(), nen.end());
// cout << endl;
for(int i=1; i<=n; i++)
{
// cout << a[i].fi.fi << " " << a[i].fi.se << endl;
}
// cout << endl;
for(int i=1; i<=n; i++)
{
int p = upper_bound(nen.begin(), nen.end(), a[i].fi.se - 1) - nen.begin();
int pos = p + mp[p];
pair<int, int> res = get(1, 1, n, 1, p - 1);
vt[i] = pos;
trace[i] = res.se;
update(1, 1, n, pos, pos, i);
update(1, 1, n, vt[res.se], 0, 0);
mp[p]++;
}
int cnt = 0;
for(int i=n; i>=1; i--)
{
int p = i;
bool ok = false;
while(check[p] == false && p > 0)
{
check[p] = true;
ans[cnt].pub(p);
p = trace[p];
ok = true;
}
cnt += ok;
}
cout << cnt << endl;
for(int i=0; i<cnt; i++)
{
cout << ans[i].size() << " ";
for(int x : ans[i]) cout << a[x].se << " ";
cout << endl;
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBwdWIgcHVzaF9iYWNrCiNkZWZpbmUgcG9iIHBvcF9iYWNrCiNkZWZpbmUgbXBhIG1ha2VfcGFpcgojZGVmaW5lIGVuZGwgJ1xuJwojZGVmaW5lIEJJVChpKSAoKDEgPDwgaSkpCmNvbnN0IGludCBtYXhuID0gMWU1ICsgMTA7CmludCBuOwp2ZWN0b3I8aW50PiBuZW47CnBhaXI8cGFpcjxpbnQsIGludD4sIGludD4gYVttYXhuXTsKYm9vbCBjbXAocGFpcjxwYWlyPGludCwgaW50PiwgaW50PiB4LCBwYWlyPHBhaXI8aW50LCBpbnQ+LCBpbnQ+IHkpCnsKICAgIGlmKHguZmkuZmkgPT0geS5maS5maSkgcmV0dXJuIHguZmkuc2UgPiB5LmZpLnNlOwogICAgcmV0dXJuIHguZmkuZmkgPCB5LmZpLmZpOwp9CgpwYWlyPGludCwgaW50PiBzZWdbbWF4biAqIDRdOwp2b2lkIHVwZGF0ZShpbnQgaWQsIGludCBsLCBpbnQgciwgaW50IHgsIGludCB2YWwsIGludCBjcykKewogICAgaWYobCA+IHggfHwgciA8IHgpIHJldHVybiA7CiAgICBpZihsID09IHIpCiAgICB7CiAgICAgICAgc2VnW2lkXSA9IHt2YWwsIGNzfTsKICAgICAgICByZXR1cm4gOwogICAgfQogICAgaW50IG1pZCA9IGwgKyByID4+IDE7CiAgICB1cGRhdGUoaWQgPDwgMSwgbCwgbWlkLCB4LCB2YWwsIGNzKTsKICAgIHVwZGF0ZShpZCA8PCAxIHwgMSwgbWlkICsgMSwgciwgeCwgdmFsLCBjcyk7CiAgICBzZWdbaWRdID0gbWF4KHNlZ1tpZCA8PCAxXSwgc2VnW2lkIDw8IDEgfCAxXSk7Cn0KCnBhaXI8aW50LCBpbnQ+IGdldChpbnQgaWQsIGludCBsLCBpbnQgciwgaW50IHgsIGludCB5KQp7CiAgICBpZihsID4geSB8fCByIDwgeCkgcmV0dXJuIHswLCAwfTsKICAgIGlmKGwgPj0geCAmJiByIDw9IHkpIHJldHVybiBzZWdbaWRdOwogICAgaW50IG1pZCA9IGwgKyByID4+IDE7CiAgICByZXR1cm4gbWF4KGdldChpZCA8PCAxLCBsLCBtaWQsIHgsIHkpLCBnZXQoaWQgPDwgMSB8IDEsIG1pZCArIDEsIHIsIHgsIHkpKTsKfQppbnQgdHJhY2VbbWF4bl07CmludCB2dFttYXhuXTsKaW50IG1wW21heG5dOwpib29sIGNoZWNrW21heG5dOwp2ZWN0b3I8aW50PiBhbnNbbWF4bl07CmludCBiYW5nbmhhdVttYXhuXTsKaW50IG1haW4oKQp7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUoMCk7CiAgICBjb3V0LnRpZSgwKTsKICAgICNkZWZpbmUgY29kZSBjb2RlCi8vICAgIGZyZW9wZW4oImNvZGUuSU5QIiwiciIsc3RkaW4pOwovLyAgICBmcmVvcGVuKCJjb2RlLk9VVCIsInciLHN0ZG91dCk7CiAgICBjaW4gPj4gbjsKICAgIG5lbi5wdWIoLTFlOSk7CiAgICBmb3IoaW50IGk9MTsgaTw9bjsgaSsrKQogICAgewogICAgICAgIGludCB4LCB5OwogICAgICAgIGNpbiA+PiB4ID4+IHk7CiAgICAgICAgYVtpXSA9IHt7eCwgeX0sIGl9OwogICAgICAgIG5lbi5wdWIoeSk7CiAgICB9CiAgICBzb3J0KGEgKyAxLCBhICsgbiArIDEsIGNtcCk7CiAgICBzb3J0KG5lbi5iZWdpbigpLCBuZW4uZW5kKCkpOwovLyAgICBjb3V0IDw8IGVuZGw7CiAgICBmb3IoaW50IGk9MTsgaTw9bjsgaSsrKQogICAgewovLyAgICAgICAgY291dCA8PCBhW2ldLmZpLmZpIDw8ICIgIiA8PCBhW2ldLmZpLnNlIDw8IGVuZGw7CiAgICB9Ci8vICAgIGNvdXQgPDwgZW5kbDsKICAgIGZvcihpbnQgaT0xOyBpPD1uOyBpKyspCiAgICB7CiAgICAgICAgaW50IHAgPSB1cHBlcl9ib3VuZChuZW4uYmVnaW4oKSwgbmVuLmVuZCgpLCBhW2ldLmZpLnNlIC0gMSkgLSBuZW4uYmVnaW4oKTsKICAgICAgICBpbnQgcG9zID0gcCArIG1wW3BdOwogICAgICAgIHBhaXI8aW50LCBpbnQ+IHJlcyA9IGdldCgxLCAxLCBuLCAxLCBwIC0gMSk7CiAgICAgICAgdnRbaV0gPSBwb3M7CiAgICAgICAgdHJhY2VbaV0gPSByZXMuc2U7CiAgICAgICAgdXBkYXRlKDEsIDEsIG4sIHBvcywgcG9zLCBpKTsKICAgICAgICB1cGRhdGUoMSwgMSwgbiwgdnRbcmVzLnNlXSwgMCwgMCk7CiAgICAgICAgbXBbcF0rKzsKICAgIH0KICAgIGludCBjbnQgPSAwOwogICAgZm9yKGludCBpPW47IGk+PTE7IGktLSkKICAgIHsKICAgICAgICBpbnQgcCA9IGk7CiAgICAgICAgYm9vbCBvayA9IGZhbHNlOwogICAgICAgIHdoaWxlKGNoZWNrW3BdID09IGZhbHNlICYmIHAgPiAwKQogICAgICAgIHsKICAgICAgICAgICAgY2hlY2tbcF0gPSB0cnVlOwogICAgICAgICAgICBhbnNbY250XS5wdWIocCk7CiAgICAgICAgICAgIHAgPSB0cmFjZVtwXTsKICAgICAgICAgICAgb2sgPSB0cnVlOwogICAgICAgIH0KICAgICAgICBjbnQgKz0gb2s7CiAgICB9CiAgICBjb3V0IDw8IGNudCA8PCBlbmRsOwogICAgZm9yKGludCBpPTA7IGk8Y250OyBpKyspCiAgICB7CiAgICAgICAgY291dCA8PCBhbnNbaV0uc2l6ZSgpIDw8ICIgIjsKICAgICAgICBmb3IoaW50IHggOiBhbnNbaV0pIGNvdXQgPDwgYVt4XS5zZSA8PCAiICI7CiAgICAgICAgY291dCA8PCBlbmRsOwogICAgfQogICAgcmV0dXJuIDA7Cn0=