#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
struct Point {
  long long x, y;
  int idx;
  Point() { x = y = idx = 0; }
  Point(int X, int Y, int Idx) {
    x = X;
    y = Y;
    idx = Idx;
  }
} p[N], origin, xt;
int n;
long long dist(Point a, Point b) {
  return ((a.x - b.x) * (a.x - b.x) + (a.y - b.y) * (a.y - b.y));
}
long long cross(Point a, Point b, Point c) {
  return ((b.x - a.x) * (c.y - a.y) - (b.y - a.y) * (c.x - a.x));
}
bool collinear(Point a, Point b, Point c) { return (cross(a, b, c) == 0); }
bool operator<(const Point& a, const Point& b) {
  return (dist(a, origin) < dist(b, origin));
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    p[i] = *new Point(x, y, i + 1);
  }
  origin = *new Point(p[0].x, p[0].y, p[0].idx);
  sort(p + 1, p + n);
  xt = *new Point(p[1].x, p[1].y, p[1].idx);
  for (int i = 2; i < n; i++) {
    if (!collinear(origin, xt, p[i])) {
      printf("%d %d %d", origin.idx, xt.idx, p[i].idx);
      break;
    }
  }
  return 0;
}
