#include <bits/stdc++.h>
using namespace std;
int dx[] = {1, -1, 0, 0};
int dy[] = {0, 0, 1, -1};
int n;
vector<pair<long long int, long long int> > vec;
map<pair<long long int, long long int>, int> idx;
bool comp(pair<long long int, long long int> &a,
          pair<long long int, long long int> &b) {
  if (a.first >= 0 and b.first < 0) return true;
  if (a.first < 0 and b.first >= 0) return false;
  if (a.first == 0 and b.first == 0) {
    if (a.second >= 0 or b.second >= 0) return a.second > b.second;
    return b.second > a.second;
  }
  int det = (a.first * b.second) - (b.first * a.second);
  if (det < 0) return true;
  if (det > 0) return false;
  int d1 = (a.first * a.first) + (a.second * a.second);
  int d2 = (b.first * b.first) + (b.second * b.second);
  return d1 > d2;
}
long double area = DBL_MAX;
long double calc(long double x, long double y, long double xx, long double yy,
                 long double xxx, long double yyy) {
  return abs((x * (yy - yyy) + xx * (yyy - y) + xxx * (y - yy)) / 2);
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cin >> n;
  for (int i = 0; i < n; i++) {
    int a, b;
    cin >> a >> b;
    idx[{a, b}] = i + 1;
    vec.push_back({a, b});
  }
  sort(vec.begin(), vec.end());
  int pos = 0;
  for (int i = 2; i < int(vec.size()); i++) {
    long double atual = calc(vec[0].first, vec[0].second, vec[1].first,
                             vec[1].second, vec[i].first, vec[i].second);
    if (atual < area and atual) pos = i, area = atual;
  }
  cout << idx[{vec[0].first, vec[0].second}] << " ";
  cout << idx[{vec[1].first, vec[1].second}] << " ";
  cout << idx[{vec[pos].first, vec[pos].second}] << "\n";
  return 0;
}
