#include <bits/stdc++.h>
using namespace std;
int buf[20], l;
int read() {
  int x = 0;
  char ch = getchar();
  bool f = 0;
  while (ch < '0' || ch > '9') {
    if (ch == '-') f = 1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9')
    x = (x << 1) + (x << 3) + (ch ^ 48), ch = getchar();
  return f ? -x : x;
}
void write(int x) {
  if (!x) {
    putchar(48);
    return;
  }
  l = 0;
  if (x < 0) putchar('-'), x = -x;
  while (x) buf[++l] = x % 10, x = x / 10;
  while (l) putchar(buf[l--] + 48);
}
const long double pi = acosl(-1.0);
struct Node {
  int idx;
  int x, y;
  long double arg;
  bool operator<(const Node &rhs) const { return arg < rhs.arg; }
} node[100005];
int main() {
  int n = read();
  for (int i = 0; i < n; ++i) {
    scanf("%d%d", &node[i].x, &node[i].y), node[i].idx = i + 1;
    node[i].arg = atan2l(node[i].y, node[i].x);
  }
  sort(node, node + n);
  long double minarg = 1000000007;
  int a, b;
  for (int i = 1; i < n; ++i) {
    long double t = node[i].arg - node[i - 1].arg;
    if (t < minarg) minarg = t, a = node[i].idx, b = node[i - 1].idx;
  }
  long double t = node[n - 1].arg - node[0].arg;
  if (t > pi) t = 2 * pi - t;
  if (t < minarg) a = node[0].idx, b = node[n - 1].idx;
  cout << a << ' ' << b << endl;
  return 0;
}
