Problem: 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).

Solution (in JAVA):

Solution:
// practice with kaiboy
import java.io.*;
import java.util.*;

public class CF120J extends PrintWriter {
	static { try { 
		System.setIn(new FileInputStream("input.txt"));
		System.setOut(new PrintStream("output.txt"));
	} catch (FileNotFoundException e) {} }
	CF120J() { super(System.out, true); }
	Scanner sc = new Scanner(System.in);
	public static void main(String[] $) {
		CF120J o = new CF120J(); o.main(); o.flush();
	}

	static final int INF = 0x3f3f3f3f;
	int[] xx, yy;
	int d_ = INF, i_, j_;
	void solve(int l, int r, Integer[] ii, Integer[] jj) {
		if (r - l == 1)
			return;
		int m = (l + r) / 2;
		int x = xx[ii[m]];
		solve(l, m, jj, ii);
		solve(m, r, jj, ii);
		int i = l, j = m, k = l;
		while (i < m && j < r)
			if (yy[ii[i]] <= yy[ii[j]])
				jj[k++] = ii[i++];
			else
				jj[k++] = ii[j++];
		while (i < m)
			jj[k++] = ii[i++];
		while (j < r)
			jj[k++] = ii[j++];
		k = l;
		for (int h = l; h < r; h++) {
			i = jj[h];
			if (Math.abs(xx[i] - x) < d_)
				ii[k++] = i;
		}
		for (int h = l; h < k; h++) {
			i = ii[h];
			for (int h_ = h + 1; h_ < k; h_++) {
				j = ii[h_];
				int dy = yy[j] - yy[i];
				dy *= dy;
				if (dy >= d_)
					break;
				int dx = xx[j] - xx[i];
				dx *= dx;
				int d = dx + dy;
				if (d_ > d) {
					d_ = d; i_ = i; j_ = j;
				}
			}
		}
	}
	void main() {
		int n = sc.nextInt();
		xx = new int[n];
		yy = new int[n];
		byte[] tt = new byte[n];
		Integer[] ii = new Integer[n];
		for (int i = 0; i < n; i++) {
			int x = sc.nextInt();
			int y = sc.nextInt();
			byte t = 0;
			if (x < 0) {
				t |= 1;
				x = -x;
			}
			if (y < 0) {
				t |= 2;
				y = -y;
			}
			xx[i] = x;
			yy[i] = y;
			tt[i] = t;
			ii[i] = i;
		}
		Arrays.sort(ii, (i, j) -> xx[i] - xx[j]);
		Integer[] jj = Arrays.copyOf(ii, n);
		solve(0, n, ii, jj);
		int t = 0;
		if ((tt[i_] & 1) == (tt[j_] & 1))
			t |= 1;
		if ((tt[i_] & 2) == (tt[j_] & 2))
			t |= 2;
		println((i_ + 1) + " 1 " + (j_ + 1) + " " + (t + 1));
	}
}