#include <bits/stdc++.h>
using namespace std;
const long double INF = 1e9, pi = 3.1415926535897;
long double sqr(long double a) { return a * a; }
struct point {
  long double x, y;
  point(long double a = 0, long double b = 0) : x(a), y(b){};
  long double length(point b) { return sqrt(sqr(x - b.x) + sqr(y - b.y)); }
  point turning(long double angle) {
    point b;
    long double A[2][2] = {{cos(angle), sin(angle)}, {-sin(angle), cos(angle)}};
    b.x = x * A[0][0] + y * A[0][1];
    b.y = x * A[1][0] + y * A[1][1];
    return b;
  }
  point shifting(point a) {
    point b;
    b.x = x - a.x;
    b.y = y - a.y;
    return b;
  }
  long double scalar(point b) { return x * b.x + y * b.y; }
  long double angle_cos(point b) {
    long double cnt = scalar(b) / (length(point()) * b.length(point()));
    if (cnt < -1)
      return -1;
    else if (cnt > 1)
      return 1;
    return cnt;
  }
};
const bool operator<(const point &a, const point &b) {
  if (a.x < b.x)
    return true;
  else if (a.x == b.x)
    return a.y < b.y;
  else
    return false;
}
istream &operator>>(istream &in, point &a) {
  cin >> a.x >> a.y;
  return in;
}
ostream &operator<<(ostream &out, point a) {
  cout << a.x << ' ' << a.y << '\n';
  return out;
}
const point OX = point(1, 0);
map<point, int> trans;
bool compare(point a, point b) {
  long double afirst, asecond;
  if (a.x >= 0 && a.y >= 0) {
    afirst = atan2l(a.y, a.x);
  } else if (a.x <= 0 && a.y >= 0) {
    afirst = atan2l(a.y, a.x);
  } else if (a.x <= 0 && a.y <= 0) {
    afirst = 2 * pi + atan2l(a.y, a.x);
  } else if (a.x >= 0 && a.y <= 0) {
    afirst = 2 * pi + atan2l(a.y, a.x);
  }
  if (b.x >= 0 && b.y >= 0) {
    asecond = atan2l(b.y, b.x);
  } else if (b.x <= 0 && b.y >= 0) {
    asecond = atan2l(b.y, b.x);
  } else if (b.x <= 0 && b.y <= 0) {
    asecond = 2 * pi + atan2l(b.y, b.x);
  } else if (b.x >= 0 && b.y <= 0) {
    asecond = 2 * pi + atan2l(b.y, b.x);
  }
  return afirst < asecond;
}
long double my_angle(point a, point b) {
  long double afirst, asecond;
  if (a.x >= 0 && a.y >= 0) {
    afirst = atan2l(a.y, a.x);
  } else if (a.x <= 0 && a.y >= 0) {
    afirst = atan2l(a.y, a.x);
  } else if (a.x <= 0 && a.y <= 0) {
    afirst = 2 * pi + atan2l(a.y, a.x);
  } else if (a.x >= 0 && a.y <= 0) {
    afirst = 2 * pi + atan2l(a.y, a.x);
  }
  if (b.x >= 0 && b.y >= 0) {
    asecond = atan2l(b.y, b.x);
  } else if (b.x <= 0 && b.y >= 0) {
    asecond = atan2l(b.y, b.x);
  } else if (b.x <= 0 && b.y <= 0) {
    asecond = 2 * pi + atan2l(b.y, b.x);
  } else if (b.x >= 0 && b.y <= 0) {
    asecond = 2 * pi + atan2l(b.y, b.x);
  }
  if (asecond < afirst) asecond += 2 * pi;
  return asecond - afirst;
}
signed main() {
  int n;
  cin >> n;
  vector<point> points(n);
  for (int i = 0; i < n; ++i) {
    cin >> points[i];
    trans[points[i]] = i + 1;
  }
  sort(points.begin(), points.end(), compare);
  pair<int, int> ans;
  long double cnt = INF;
  for (int i = 0; i < n; ++i) {
    if (cnt > my_angle(points[i], points[(i + 1) % n])) {
      cnt = my_angle(points[i], points[(i + 1) % n]);
      ans.first = trans[points[i]];
      ans.second = trans[points[(i + 1) % n]];
    }
  }
  compare(points[1], points[2]);
  cout << ans.first << ' ' << ans.second << '\n';
  return 0;
}
