#include <bits/stdc++.h>
using namespace std;
const long long MOD[] = {1000000007LL, 2117566807LL};
const long long BASE[] = {1572872831LL, 1971536491LL};
struct node {
  int x, y, z;
  node(int a, int b, int c) {
    x = a;
    y = b;
    z = c;
  }
};
pair<long long, long long> conv(node a) {
  pair<long long, long long> temp;
  temp.first = a.x;
  temp.second = a.y;
  return temp;
}
bool cmp(node a, node b) {
  if (a.x == b.x) return a.y < b.y;
  return a.x < b.x;
}
long long area(node x, node y, node z) {
  pair<long long, long long> a = conv(x);
  pair<long long, long long> b = conv(y);
  pair<long long, long long> c = conv(z);
  long long res = 0;
  res += a.first * b.second + b.first * c.second + c.first * a.second;
  res -= a.second * b.first + b.second * c.first + c.second * a.first;
  return res;
}
int main() {
  int test;
  int n;
  scanf("%d", &n);
  std::vector<node> v;
  for (int i = 0; i < n; i++) {
    int a, b;
    scanf("%d%d", &a, &b);
    v.push_back(node(a, b, i + 1));
  }
  sort(v.begin(), v.end(), cmp);
  for (int i = 0; i < n - 2; i++) {
    long long temp = area(v[i], v[i + 1], v[i + 2]);
    if (temp == 0) {
      continue;
    } else {
      cout << v[i].z << ' ' << v[i + 1].z << ' ' << v[i + 2].z << endl;
      return 0;
    }
  }
}
