#include<iostream> #include<cstdio> #include<list> #include<algorithm> #include<cstring> #include<string> #include<queue> #include<stack> #include<map> #include<vector> #include<cmath> #include<memory.h> #define ll long long #define LL __int64 using namespace std; vector<int>G[100002]; struct Node { int s,t; int id; }node[100002]; void clear() { memset(node,0,sizeof(node)); } bool cmp(Node x,Node y) { if(x.s==y.s) { if(x.t==y.t) return x.id<y.id; return x.t<y.t; } return x.s<y.s; } int main() { int n; while(cin>>n) { clear(); for(int i=0;i<=n+1;i++) G[i].clear(); for(int i=0;i<n;i++) { scanf("%d %d",&node[i].s,&node[i].t); node[i].id=i+1; } sort(node,node+n,cmp); int minn=node[0].t; int ans=1; G[ans].push_back(node[0].id); for(int i=1;i<n;i++) { if(node[i].s<minn) { G[ans].push_back(node[i].id); if(node[i].t<minn) minn=node[i].t; } else { ans++; G[ans].push_back(node[i].id); minn=node[i].t; } } cout<<ans<<endl; for(int i=1;i<=ans;i++) { for(int j=0;j<G[i].size();j++) { if(j!=0) printf(" %d",G[i][j]); else printf("%d",G[i][j]); } cout<<endl; } } return 0; }