#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct Rectangle {
int h, w, index;
};
// Compare function for sorting
bool compare(const Rectangle &a, const Rectangle &b) {
if (a.h == b.h) return a.w < b.w;
return a.h < b.h;
}
int main() {
int n;
cin >> n;
vector<Rectangle> rects(n);
for (int i = 0; i < n; i++) {
int h, w;
cin >> h >> w;
if (h > w) swap(h, w); // Ensure h ≤ w
rects[i] = {h, w, i + 1}; // Store original index
}
// Sort rectangles
sort(rects.begin(), rects.end(), compare);
// LIS on widths
vector<int> dp(n, 1), prev(n, -1);
int max_len = 1, last_index = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < i; j++) {
if (rects[j].w < rects[i].w) { // Only compare widths
if (dp[j] + 1 > dp[i]) {
dp[i] = dp[j] + 1;
prev[i] = j;
}
}
}
if (dp[i] > max_len) {
max_len = dp[i];
last_index = i;
}
}
// Retrieve the sequence
vector<int> sequence;
for (int i = last_index; i != -1; i = prev[i]) {
sequence.push_back(rects[i].index);
}
reverse(sequence.begin(), sequence.end());
// Output results
cout << max_len << endl;
for (int i : sequence) cout << i << " ";
cout << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBSZWN0YW5nbGUgewogICAgaW50IGgsIHcsIGluZGV4Owp9OwoKLy8gQ29tcGFyZSBmdW5jdGlvbiBmb3Igc29ydGluZwpib29sIGNvbXBhcmUoY29uc3QgUmVjdGFuZ2xlICZhLCBjb25zdCBSZWN0YW5nbGUgJmIpIHsKICAgIGlmIChhLmggPT0gYi5oKSByZXR1cm4gYS53IDwgYi53OwogICAgcmV0dXJuIGEuaCA8IGIuaDsKfQoKaW50IG1haW4oKSB7CiAgICBpbnQgbjsKICAgIGNpbiA+PiBuOwogICAgCiAgICB2ZWN0b3I8UmVjdGFuZ2xlPiByZWN0cyhuKTsKICAgIAogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICBpbnQgaCwgdzsKICAgICAgICBjaW4gPj4gaCA+PiB3OwogICAgICAgIGlmIChoID4gdykgc3dhcChoLCB3KTsgLy8gRW5zdXJlIGgg4omkIHcKICAgICAgICByZWN0c1tpXSA9IHtoLCB3LCBpICsgMX07IC8vIFN0b3JlIG9yaWdpbmFsIGluZGV4CiAgICB9CgogICAgLy8gU29ydCByZWN0YW5nbGVzCiAgICBzb3J0KHJlY3RzLmJlZ2luKCksIHJlY3RzLmVuZCgpLCBjb21wYXJlKTsKCiAgICAvLyBMSVMgb24gd2lkdGhzCiAgICB2ZWN0b3I8aW50PiBkcChuLCAxKSwgcHJldihuLCAtMSk7CiAgICBpbnQgbWF4X2xlbiA9IDEsIGxhc3RfaW5kZXggPSAwOwoKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBpOyBqKyspIHsKICAgICAgICAgICAgaWYgKHJlY3RzW2pdLncgPCByZWN0c1tpXS53KSB7IC8vIE9ubHkgY29tcGFyZSB3aWR0aHMKICAgICAgICAgICAgICAgIGlmIChkcFtqXSArIDEgPiBkcFtpXSkgewogICAgICAgICAgICAgICAgICAgIGRwW2ldID0gZHBbal0gKyAxOwogICAgICAgICAgICAgICAgICAgIHByZXZbaV0gPSBqOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChkcFtpXSA+IG1heF9sZW4pIHsKICAgICAgICAgICAgbWF4X2xlbiA9IGRwW2ldOwogICAgICAgICAgICBsYXN0X2luZGV4ID0gaTsKICAgICAgICB9CiAgICB9CgogICAgLy8gUmV0cmlldmUgdGhlIHNlcXVlbmNlCiAgICB2ZWN0b3I8aW50PiBzZXF1ZW5jZTsKICAgIGZvciAoaW50IGkgPSBsYXN0X2luZGV4OyBpICE9IC0xOyBpID0gcHJldltpXSkgewogICAgICAgIHNlcXVlbmNlLnB1c2hfYmFjayhyZWN0c1tpXS5pbmRleCk7CiAgICB9CiAgICAKICAgIHJldmVyc2Uoc2VxdWVuY2UuYmVnaW4oKSwgc2VxdWVuY2UuZW5kKCkpOwoKICAgIC8vIE91dHB1dCByZXN1bHRzCiAgICBjb3V0IDw8IG1heF9sZW4gPDwgZW5kbDsKICAgIGZvciAoaW50IGkgOiBzZXF1ZW5jZSkgY291dCA8PCBpIDw8ICIgIjsKICAgIGNvdXQgPDwgZW5kbDsKCiAgICByZXR1cm4gMDsKfQ==