#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
struct node
{
int w, s;
int index; //储存标号
} mouse[1005]; //小鼠的信息
//先体重,后速度
bool cmp(node a,node b)
{
if(a.w==b.w)
return a.s<b.s;
return a.w<b.w;
}
int main()
{
int dp[1005],load[1005],ans[1005];
int i, maxl,maxi,n,temp,x;
i=1;
while(scanf("%d%d",&mouse[i].w,&mouse[i].s)!= EOF)
{
mouse[i].index=i;
dp[i]=1;
load[i]=0;
i++;
}
sort(mouse+1,mouse+i,cmp);
//总数量
n=i-1;
maxl=0;
for(int i=2;i<=n;i++)
{
for(int j=1;j<i;j++)
if(mouse[i].w>mouse[j].w&&mouse[i].s<mouse[j].s&&dp[i]<dp[j]+1)
{
//如果i的体重比j的小,而且速度j的大,并且还得j的最长子序列加一要大于目前i的最长子序列
dp[i] = dp[j] + 1;
load[i] = j;
}
if(dp[i]>maxl)
{
//最长序列
maxl = dp[i];
//序列最后一个
maxi = i;
}
}
temp=maxi;
x=0;
//将最终的结果标号存入数组中
while(temp!=0)
{
ans[x]=temp;
temp=load[temp];
x++;
}
printf("%d\n", maxl);
for(int i=maxl-1;i>= 0;i--)//标号存的时候是倒序,所以要给它反过来
printf("%d\n",mouse[ans[i]].index);
return 0;
}