#include <bits/stdc++.h>

using namespace std;

const int maxn = 500000;

struct Point{
	int x, y, id;
};

bool operator <(Point a, Point b) {
	return a.x < b.x || (a.x == b.x && a.y < b.y);
}

Point a[maxn];
int n, k, res[maxn];

bool cmp(int i1, int i2) {
	return a[i1].x <= a[i2].x && a[i1].y <= a[i2].y;
}

int main() {
	#define NAME "mainpoint"
	assert(freopen(NAME ".in", "r", stdin));
	assert(freopen(NAME ".out", "w", stdout));

	assert(scanf("%d", &n) == 1);
	assert(0 < n && n <= maxn);
	for (int i = 0; i < n; ++i) {
		assert(scanf("%d%d", &a[i].x, &a[i].y) == 2);
		a[i].id = i + 1;
	}  
	sort(a, a + n);
	 
	forn(i, n) {
		while (k > 0 && cmp(res[k - 1], i)) --k;
		res[k++] = i;
	}
	printf("%d\n", k);
	forn(i, k) {
		printf("%d ", a[res[i]].id);
	}
}