#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);
}
}