#include<stdio.h>
#include<algorithm>
#include<iostream>
#include<string.h>
#include<vector>
using namespace std;
struct node{
int hao;
int w;
int v;
node(){
}
node(int _hao,int _w,int _v)
{
hao = _hao;
w = _w;
v = _v;
}
};
node a[1005];
int dp[1005];
//node b[1005];
bool cmp1(node x,node y)
{
if(x.w==y.w)
return x.v>y.v;
return x.w<y.w;
}
int main()
{
int W,V,st;
int cnt=1;
while(cin>>W>>V)
{
a[cnt].hao=cnt;
a[cnt].w = W;
a[cnt].v =V;
/*b[cnt].hao = cnt;
b[cnt].w =W;
b[cnt].v =V;*/
cnt++;
}
sort(a+1,a+cnt,cmp1);
//sort(b+1,b+cnt,cmp2);
int vis[1005];
for(int i=0;i<1005;i++) vis[i]=-1;
for(int i=0;i<cnt;i++) dp[i]=1;
int ans = 0;
for(int j=1;j<cnt;j++)
{
for(int i=1;i<j;i++)
{
if(a[j].v<a[i].v)
{
if(a[j].w == a[i].w) continue;
//dp[j]=max(dp[j],dp[i]+1);
if(dp[j]<dp[i]+1)
{
dp[j]=dp[i]+1;
vis[j]=i; //这里记录路径,实际上就是一个索引
}
}
}
//ans = max(ans,dp[j]);
if(ans<dp[j])
{
ans = dp[j];
st = j; //记录最后一个位置,以便找到之前的数
}
}
cout<<ans<<endl;
vector<int> vt;
vt.clear();
while(st!=-1)
{
vt.push_back(a[st].hao);
st = vis[st];
}
for(int i=vt.size()-1 ;i>=0;i--)
{
printf("%d\n",vt[i]);
}
return 0;
}