#include <bits/stdc++.h>
static inline int popcount(int x) { return __builtin_popcount(x); }
template <class T, class U>
static inline std::pair<T, U> mp(const T& a, const U& b) {
  return std::make_pair(a, b);
}
static constexpr int INF = std::numeric_limits<int>::max();
static constexpr int MAXN = 50;
static bool coll(const std::pair<int, int>& a, const std::pair<int, int>& b,
                 const std::pair<int, int>& c) {
  const long long check1 = 1LL * (b.second - a.second) * (c.first - b.first);
  const long long check2 = 1LL * (c.second - b.second) * (b.first - a.first);
  return check1 == check2;
}
int main() {
  int size;
  std::scanf("%d", &size);
  std::vector<std::pair<std::pair<int, int>, int> > i_hate_bolisetty;
  for (int i = 0; i < size; i++) {
    int a, b;
    std::scanf("%d %d", &a, &b);
    i_hate_bolisetty.push_back(mp(mp(a, i + 1), b));
  }
  std::sort(i_hate_bolisetty.begin(), i_hate_bolisetty.end(),
            [&](const std::pair<std::pair<int, int>, int>& a,
                const std::pair<std::pair<int, int>, int>& b) {
              if (a.first.first == b.first.first) return a.second < b.second;
              return a.first.first < b.first.first;
            });
  std::pair<int, int> a =
      mp(i_hate_bolisetty[0].first.first, i_hate_bolisetty[0].second);
  std::pair<int, int> b =
      mp(i_hate_bolisetty[1].first.first, i_hate_bolisetty[1].second);
  std::pair<int, int> c =
      mp(i_hate_bolisetty[2].first.first, i_hate_bolisetty[2].second);
  int idx = 3;
  int luv = i_hate_bolisetty[2].first.second;
  ;
  while (coll(a, b, c)) {
    c = mp(i_hate_bolisetty[idx].first.first, i_hate_bolisetty[idx].second);
    luv = i_hate_bolisetty[idx].first.second;
    idx++;
  }
  std::printf("%d %d %d\n", i_hate_bolisetty[0].first.second,
              i_hate_bolisetty[1].first.second, luv);
  return 0;
}
