120_J. Minimum Sum

You are given a set of n vectors on a plane. For each vector you are allowed to multiply any of its coordinates by -1. Thus, each vector vi = (xi, yi) can be transformed into one of the following four vectors:

  * vi1 = (xi, yi), 
  * vi2 = ( - xi, yi), 
  * vi3 = (xi, - yi), 
  * vi4 = ( - xi, - yi). 



You should find two vectors from the set and determine which of their coordinates should be multiplied by -1 so that the absolute value of the sum of the resulting vectors was minimally possible. More formally, you should choose two vectors vi, vj (1 ≤ i, j ≤ n, i ≠ j) and two numbers k1, k2 (1 ≤ k1, k2 ≤ 4), so that the value of the expression |vik1 + vjk2| were minimum.

Input

The first line contains a single integer n (2 ≤ n ≤ 105). Then n lines contain vectors as pairs of integers "xi yi" ( - 10000 ≤ xi, yi ≤ 10000), one pair per line.

Output

Print on the first line four space-separated numbers "i k1 j k2" — the answer to the problem. If there are several variants the absolute value of whose sums is minimum, you can print any of them. 

Examples

Input

5
-7 -3
9 0
-8 6
7 -8
4 -5


Output

3 2 4 2


Input

5
3 2
-4 7
-6 0
-8 4
5 1


Output

3 4 5 4

Note

A sum of two vectors v = (xv, yv) and u = (xu, yu) is vector s = v + u = (xv + xu, yv + yu).

An absolute value of vector v = (x, y) is number <image>. 

In the second sample there are several valid answers, such as:

(3 1 4 2), (3 1 4 4), (3 4 4 1), (3 4 4 3), (4 1 3 2), (4 1 3 4), (4 2 3 1).

Example input:
5
3 2
-4 7
-6 0
-8 4
5 1

5
-7 -3
9 0
-8 6
7 -8
4 -5


Example output:
3 4 5 4

3 2 4 2


Tags: divide and conquer
geometry
sortings
Difficulty rating: 1900

Solution:
#include <bits/stdc++.h>
using namespace std;
const long long maxn = 1e5 + 10;
ifstream input;
ofstream output;
long long n;
pair<long long, long long> a[maxn];
pair<pair<long long, long long>, long long> b[maxn], c[maxn];
int32_t main() {
  input.open("input.txt");
  output.open("output.txt");
  if (!input) {
    cout << -1 << endl;
    return 0;
  }
  input >> n;
  for (long long i = 0; i < n; i++) {
    long long x, y;
    input >> x >> y;
    b[i] = {{abs(x), abs(y)}, i};
    c[i] = {{abs(y), abs(x)}, i};
    a[i] = {x, y};
  }
  long long pos;
  long long pos1;
  long long ans = 1e12;
  sort(b, b + n);
  for (long long i = 0; i < n; i++) {
    long long j = 1;
    while (i + j < n && j < 200) {
      long long x = abs(b[i + j].first.first - b[i].first.first);
      long long y = abs(b[i + j].first.second - b[i].first.second);
      long long t_ans = x * x + y * y;
      if (ans > t_ans) {
        ans = t_ans;
        pos = b[i].second;
        pos1 = b[i + j].second;
      }
      j++;
    }
  }
  long long x1 = a[pos].first;
  long long y1 = a[pos].second;
  long long x2 = a[pos1].first;
  long long y2 = a[pos1].second;
  output << pos + 1 << ' ';
  if (x1 > 0 && y1 > 0) {
    output << 1;
  } else if (x1 > 0 && y1 < 0) {
    output << 3;
  } else if (x1 < 0 && y1 > 0) {
    output << 2;
  } else {
    output << 4;
  }
  output << ' ' << pos1 + 1 << ' ';
  if (x2 > 0 && y2 > 0) {
    output << 4;
  } else if (x2 > 0 && y2 < 0) {
    output << 2;
  } else if (x2 < 0 && y2 > 0) {
    output << 3;
  } else {
    output << 1;
  }
  output << "\n";
  output.close();
  input.close();
}