#include <bits/stdc++.h>
using namespace std;
template <class T1>
void check(T1 e) {
  cout << "-->" << e << endl;
}
template <class T1, class T2>
void check(T1 e1, T2 e2) {
  cout << "-->" << e1 << " " << e2 << endl;
}
template <class T1, class T2, class T3>
void check(T1 e1, T2 e2, T3 e3) {
  cout << "-->" << e1 << " " << e2 << " " << e3 << endl;
}
template <class T1, class T2, class T3, class T4>
void check(T1 e1, T2 e2, T3 e3, T4 e4) {
  cout << "-->" << e1 << " " << e2 << " " << e3 << " " << e4 << endl;
}
template <class T1, class T2, class T3, class T4, class T5>
void check(T1 e1, T2 e2, T3 e3, T4 e4, T5 e5) {
  cout << e1 << " " << e2 << " " << e3 << " " << e4 << " " << e5 << endl;
}
template <class T1, class T2, class T3, class T4, class T5, class T6>
void check(T1 e1, T2 e2, T3 e3, T4 e4, T5 e5, T6 e6) {
  cout << e1 << " " << e2 << " " << e3 << " " << e4 << " " << e5 << " " << e6
       << endl;
}
struct point {
  int x, y, pos;
} p[200000];
bool cmp(point x, point y) {
  if (x.x != y.x) return x.x < y.x;
  return x.y < y.y;
}
double slope(int x1, int y1, int x2, int y2) {
  return ((double)(y1 - y2)) / ((double)(x1 - x2));
}
int main() {
  int n, i;
  while (scanf("%d", &n) == 1) {
    for (i = 0; i < n; i++) {
      scanf("%d %d", &p[i].x, &p[i].y);
      p[i].pos = i;
    }
    sort(p, p + n, cmp);
    int ans[5];
    ans[0] = p[0].pos + 1;
    ans[1] = p[1].pos + 1;
    double s1 = slope(p[0].x, p[0].y, p[1].x, p[1].y);
    for (i = 2; i < n; i++) {
      double s2 = slope(p[0].x, p[0].y, p[i].x, p[i].y);
      if (s1 != s2) {
        ans[2] = p[i].pos + 1;
        break;
      }
    }
    printf("%d %d %d\n", ans[0], ans[1], ans[2]);
  }
  return 0;
}
