#include<stdio.h>
#include<stdlib.h>
struct mouse{int w;int s;int number;}m[1005],temp;
int cmp(const void*a,const void*b)
{
if(((mouse *)a)->w==((mouse *)b)->w)
return ((mouse *)b)->s-((mouse *)a)->s;
return ((mouse *)a)->w-((mouse *)b)->w;
}
int main()
{
int i,j,I,num=0,n,dp[1005]={0},dpshang[1005],pr[1005];
for(i=1;;i++)
{
m[i].number=i;
if(scanf("%d%d",&m[i].w,&m[i].s)==EOF)break;
}
n=i-1;
qsort(m+1,n,sizeof(m[0]),cmp);//设Mice[i].W表示第i只老鼠的重量,
//Mice[i].S表示第i只老鼠的速度。
//我们先对Mice进行排序,以W为第一关键字,
//从小到大,S为第二关键字,从大到小。
m[0].s=10000000;
for(i=1;i<=n;i++)//找出最优解 用dpshang并记录最优求解过程
{
int max=dp[0];I=0;
for(j=1;j<i;j++)
{
if(dp[j]>max&&m[j].w<m[i].w&&m[j].s>m[i].s)
{
max=dp[j];
I=j;
}
}
dp[i]=max+1;
dpshang[i]=I;
}
//for(i=0;i<=n;i++)printf("%d %d %d %d %d %d/n",i,m[i].w,m[i].s,m[i].number,dp[i],dpshang[i]);
int max=dp[n];I=n;
for(i=n;i>0;i--)if(dp[i]>max){max=dp[i];I=i;}//找出最长子序列
printf("%d/n",max);
pr[max]=m[I].number;//一下三行输出这个最优过程并存在pr数组中
int t=dpshang[I];
for(i=max-1;i>0;i--) {pr[i]=m[t].number;t=dpshang[t];}
for(i=1;i<=max;i++)printf("%d/n",pr[i]);
return 0;
}