#include <fstream>
#include <list>
#include <vector>
#include <stack>
#include <algorithm>

using namespace std;

struct group
{
	int a;
	int b;
	int c;
	int t[1005];
	int n;
};

int main()
{
	stack<int> st;
	int m = 0;
	int n;
	ifstream in("joke.in");
	in >> n;
	ofstream out("joke.out");
	vector <group> v (1005);
	int p = 0;
	int i, j, a, b;
	for(i = 0; i < n; i ++)
	{
		in >> a >> b;
		if(a + b >= n)
		{
			m ++;
			st.push(i);
			continue;
		}
		for(j = 0; j < p; j ++)
		{
			if(v[j].a == a && v[j].b == b && v[j].n < v[j].c)
				break;
		}
		if(j == p)
		{
			v[p].a = a;
			v[p].b = b;
			v[p].c = n - a - b;
			v[p].n = 1;
			v[p].t[v[p].n - 1] = i;
			p ++;
		}
		else
		{
			v[j].n ++;
			v[j].t[v[j].n - 1] = i;
		}
	}
	int y = 0;
	vector <bool> bb(1005);
	/*for(i = 0; i < p; i ++)
	{
		if(v[i].n > v[i].c)
		{
			int x = v[i].n - v[i].c;
			v[i].n = v[i].c;
			for(j = 0; j < x; j ++)
			{
				st.push(v[i].t[v[i].n - 1 - j]);
				m ++;
			}
		}
	}*/
	for(i = 0; i < p; i ++)
	{
		if(v[i].n == v[i].c)
			bb[i] = false;
		else
		{
			bb[i] = true;
			y ++;
		}
	}
	while(y > 0)
	{
		int min = n + 1;
		int max = n + 1;
		int i1, i2;
		for(i = 0; i < p; i ++)
		{
			if(v[i].n < min && bb[i])
			{
				min = v[i].n;
				i1 = i;
			}
		}
		for(i = 0; i < p; i ++)
		{
			if(v[i].c - v[i].n < max && bb[i] && i != i1)
			{
				max = v[i].c - v[i].n;
				i2 = i;
			}
		}
		v[i1].n --;
		m ++;
		st.push(v[i1].t[v[i1].n]);
		if(v[i1].n == 0)
		{
			y --;
			bb[i1] = false;
		}
		v[i2].n ++;
		v[i2].t[v[i2].n - 1] = st.top();
		if(v[i2].n == v[i2].c)
		{
			y --;
			bb[i2] = false;
		}
	}
	out << m;
	vector<int> q(m);
	i = 0;
	while(!st.empty())
	{
		q[i] = st.top();
		st.pop();
		i ++;
	}
	sort(q.begin(), q.end());
	for(i = 0; i < m; i ++)
		out << ' ' << q[i] + 1;
	in.close();
	out.close();
	return 0;
}