#include <bits/stdc++.h>
using Angle = long double;
using Vector = std::complex<long double>;
std::vector<Vector> ReadInput(std::istream& in_stream = std::cin);
void WriteAnswer(size_t fst, size_t snd, std::ostream& out_stream = std::cout);
std::pair<size_t, size_t> FindNearest(const std::vector<Vector>& vectors);
int main() {
  std::ios_base::sync_with_stdio(false);
  std::cin.tie(nullptr);
  auto input = ReadInput();
  auto result = FindNearest(input);
  WriteAnswer(result.first, result.second);
  return 0;
}
std::pair<size_t, size_t> FindNearest(const std::vector<Vector>& vectors) {
  std::vector<std::pair<Vector, size_t>> solve;
  for (size_t i = 0; i < vectors.size(); ++i) {
    solve.push_back({vectors[i], i});
  }
  auto compare_angles = [](Vector a, Vector b) {
    return std::arg(a) < std::arg(b);
  };
  auto compare_pairs = [compare_angles](std::pair<Vector, size_t> a,
                                        std::pair<Vector, size_t> b) {
    return compare_angles(a.first, b.first);
  };
  const Angle pi = acosl(-1);
  std::sort(solve.begin(), solve.end(), compare_pairs);
  auto angle = [pi](Vector a, Vector b) {
    Angle pre_angle = fabsl(std::arg(a) - std::arg(b));
    return std::min(pre_angle, 2 * pi - pre_angle);
  };
  size_t pos_1 = solve.front().second, pos_2 = solve.back().second;
  for (auto it = solve.begin(), next = solve.begin() + 1;
       it != solve.end() && next != solve.end(); ++it, ++next) {
    if (angle(it->first, next->first) < angle(vectors[pos_1], vectors[pos_2])) {
      pos_1 = it->second, pos_2 = next->second;
    }
  }
  return {pos_1, pos_2};
}
void WriteAnswer(size_t fst, size_t snd, std::ostream& out_stream) {
  out_stream << fst + 1 << ' ' << snd + 1 << '\n';
}
std::vector<Vector> ReadInput(std::istream& in_stream) {
  size_t input_size;
  in_stream >> input_size;
  std::vector<Vector> input(input_size);
  for (auto& vector : input) {
    long double x, y;
    in_stream >> x >> y;
    vector = Vector(x, y);
  }
  return input;
}
