#include <bits/stdc++.h>
const double eps = 1e-8;
const int MAXN = (int)1e5 + 5;
using namespace std;
struct Node {
  int id;
  long long x, y;
  Node() {}
  Node(int id, long long x, long long y) : id(id), x(x), y(y) {}
  bool operator<(const Node &rhs) const {
    return x < rhs.x || (x == rhs.x && y < rhs.y);
  }
} pos[MAXN];
long long Cross(Node a, Node b) { return a.x * b.y - a.y * b.x; }
int main(int argc, char const *argv[]) {
  int n;
  cin >> n;
  for (int i = 1; i <= n; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    pos[i] = Node(i, x, y);
  }
  sort(pos + 1, pos + n + 1);
  for (int i = 1; i <= n - 2; i++) {
    Node &a = pos[i];
    Node &b = pos[i + 1];
    Node &c = pos[i + 2];
    long long tmp =
        Cross(Node(0, b.x - a.x, b.y - a.y), Node(0, c.x - a.x, c.y - a.y));
    if (tmp) {
      cout << a.id << ' ' << b.id << ' ' << c.id << endl;
      break;
    }
  }
  return 0;
}
