Dirty Deeds Done Dirt Cheap

You are given n pairs of integers (a1,b1),(a2,b2),,(an,bn). All of the integers in the pairs are distinct and are in the range from 1 to 2n inclusive.

Let’s call a sequence of integers x1,x2,,x2k good if either

  • x1<x2>x3<<x2k2>x2k1<x2k, or
  • x1>x2<x3>>x2k2<x2k1>x2k.

You need to choose a subset of distinct indices i1,i2,,it and their order in a way that if you write down all numbers from the pairs in a single sequence (the sequence would be ai1,bi1,ai2,bi2,,ait,bit), this sequence is good.

What is the largest subset of indices you can choose? You also need to construct the corresponding index sequence i1,i2,,it.

Input

The first line contains single integer n (2n3105) — the number of pairs.

Each of the next n lines contain two numbers — ai and bi (1ai,bi2n) — the elements of the pairs.

It is guaranteed that all integers in the pairs are distinct, that is, every integer from 1 to 2n is mentioned exactly once.

Output

In the first line print a single integer t — the number of pairs in the answer.

Then print t distinct integers i1,i2,,it — the indexes of pairs in the corresponding order.

Examples

input

5
1 7
6 4
2 10
9 8
3 5

output

3
1 5 3

input

3
5 4
3 2
6 1

output

3
3 2 1

Note

The final sequence in the first example is 1<7>3<5>2<10.

The final sequence in the second example is 6>1<3>2<5>4.

Solution:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <bits/stdc++.h>
 
using namespace std;
 
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int n;
cin >> n;
vector<int> a(n);
vector<int> b(n);
vector<int> lt;
vector<int> gt;
for (int i = 0; i < n; i++) {
    cin >> a[i] >> b[i];
if (a[i] < b[i]) {
      lt.push_back(i);
    } else {
      gt.push_back(i);
    }
  }
  vector<int> ans;
if (lt.size() > gt.size()) {
sort(lt.begin(), lt.end(), [&](int i, int j) {
return b[i] > b[j];
});
ans = lt;
} else {
sort(gt.begin(), gt.end(), [&](int i, int j) {
return a[i] < a[j];
    });
    ans = gt;
  }
  cout << ans.size() << '\n';
  for (int i = 0; i < (int) ans.size(); i++) {
    if (i > 0) {
cout << " ";
    }
    cout << ans[i] + 1;
  }
  cout << '\n';
  return 0;
}