#include <bits/stdc++.h>
using namespace std;
int test = 0;
struct pnt_t {
  long double x;
  long double y;
  int idx;
  long double at() { return ::atan2((long double)(y), (long double)(x)); }
};
bool cmp(pnt_t &a, pnt_t &b) { return a.at() < b.at(); }
long double pi = 3.141592653589793238;
long double dist(pnt_t &a, pnt_t &b) {
  long double at1 = a.at();
  long double at2 = b.at();
  if (at1 > at2) swap(at1, at2);
  long double d1 = abs(at1 - at2);
  long double d2 = abs(pi - at2) + abs(-pi - at1);
  return min(d1, d2);
}
int main() {
  vector<pnt_t> pnts;
  int n;
  int i, j, k;
  cin >> n;
  for (int i = 0; i < n; i++) {
    pnt_t t;
    cin >> t.x >> t.y;
    t.idx = i + 1;
    pnts.push_back(t);
  }
  sort(pnts.begin(), pnts.end(), cmp);
  if (test)
    for (int i = 0; i < n; i++) {
      pnt_t &t = pnts[i];
      printf("<%f %f %d>\n", t.x, t.y, t.idx);
    }
  long double best = 9999;
  int best_i;
  for (int i = 0; i < n; i++) {
    int j = (i + 1) % n;
    auto &p = pnts[i];
    auto &q = pnts[j];
    long double v = dist(p, q);
    if (test) printf("<%d %d %.20f>", p.idx, q.idx, v);
    if (v < best) {
      best = v;
      best_i = i;
    }
  }
  printf("%d %d\n", pnts[best_i].idx, pnts[(best_i + 1) % n].idx);
  return 0;
}
