#include <bits/stdc++.h>
using namespace std;
const int inf = 2e9;
struct point {
  int x, y, id;
  point operator-(const point &a) const {
    point res;
    res.x = x - a.x;
    res.y = y - a.y;
    return res;
  }
  int operator*(const point &a) const { return x * a.y - y * a.x; }
} p[100010], o;
int dis(point x, point y) {
  return (x.x - y.x) * (x.x - y.x) + (x.y - y.y) * (x.y - y.y);
}
int qua(point x) {
  if (x.x > 0 && x.y >= 0) {
    return 1;
  }
  if (x.x <= 0 && x.y > 0) {
    return 2;
  }
  if (x.x < 0 && x.y <= 0) {
    return 3;
  }
  if (x.x >= 0 && x.y < 0) {
    return 4;
  }
}
bool cmp(point x, point y) {
  if (fabs(atan2(x.y, x.x) - atan2(y.y, y.x)) > 0.1) {
    return atan2(x.y, x.x) < atan2(y.y, y.x);
  }
  int tmp = (x - o) * (y - o);
  if (tmp == 0) {
    return dis(x, o) < dis(y, o);
  } else {
    return tmp > 0;
  }
}
point Div(point x, point y) {
  point res;
  res.x = x.x * y.x + x.y * y.y;
  res.y = x.y * y.x - x.x * y.y;
  return res;
}
int n, ans, ansa = 1, ansb = -inf;
bool upd(int a, int b) {
  if (1LL * a * ansb < 1LL * ansa * b) {
    ansa = a;
    ansb = b;
    return true;
  } else {
    return false;
  }
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf("%d%d", &p[i].x, &p[i].y);
    p[i].id = i + 1;
  }
  sort(p, p + n, cmp);
  p[n] = p[0];
  for (int i = 0; i < n; i++) {
    point x = Div(p[i], p[i + 1]);
    if (x.y < 0) {
      x.y = -x.y;
    }
    if (upd(x.y, x.x)) {
      ans = i;
    }
  }
  printf("%d %d\n", p[ans].id, p[ans + 1].id);
  return 0;
}
