#include <bits/stdc++.h>
using namespace std;
const long double INF = 1e18;
struct P {
  long double x, y;
  P operator-(P &b) { return P{x - b.x, y - b.y}; }
  void read() { cin >> x >> y; }
  long double operator*(P b) { return x * b.y - y * b.x; }
  long double triangle(P b, P c) { return (b - *this) * (c - *this); }
};
int main() {
  int n, third = 2, s = 2;
  long double area = INF;
  cin >> n;
  vector<P> point(n);
  for (P &p : point) p.read();
  P a = point[0], b = point[1];
  for (int i = 2; i < n; i++) {
    if (a.triangle(b, point[i]) == 0) {
      if (((a - point[i]).x < 0 && (b - point[i]).x > 0) ||
          ((a - point[i]).y < 0 && (b - point[i]).y > 0) ||
          (a - point[i]).x > 0 && ((b - point[i]).x < 0) ||
          ((a - point[i]).y > 0 && (b - point[i]).y < 0)) {
        b = point[i];
        s = i + 1;
      }
    }
  }
  for (int i = 2; i < n; i++) {
    area = a.triangle(b, point[i]) != 0
               ? min(area, abs(a.triangle(b, point[i])))
               : area;
    third = area == abs(a.triangle(b, point[i])) ? i : third;
  }
  cout << "1 " << s << " " << third + 1;
  return 0;
}
