#include <bits/stdc++.h>
using namespace std;
const bool testing = false;
pair<long long, long long> d[100000];
int nf[100000], nb[100000];
pair<long long, long long> getmid(int a, int b) {
  long long y = d[b].second - d[a].second;
  long long x = d[b].first - d[a].first;
  pair<long long, long long> res =
      make_pair(-y + x * x + 2 * x * d[a].first, 2 * x);
  return res;
}
void program() {
  int n;
  cin >> n;
  for (int i = 0; i < n; i++) {
    long long t1, t2;
    cin >> t1 >> t2;
    d[i] = make_pair(t1, t2);
  }
  std::sort(d, d + n);
  int start = 0;
  while (start + 1 < n && d[start + 1].first == d[start].first) start++;
  {
    nb[start] = -1;
    int prev = start;
    while (prev < n) {
      int t = prev + 1;
      while (t + 1 < n && d[t + 1].first == d[t].first) t++;
      if (t < n) nb[t] = prev;
      nf[prev] = t;
      prev = t;
    }
  }
  {
    int t1 = start;
    while (true) {
      int t2 = nf[t1];
      if (t2 == n) break;
      int t3 = nf[t2];
      if (t3 == n) break;
      pair<long long, long long> A1 = getmid(t1, t2);
      pair<long long, long long> A2 = getmid(t1, t3);
      if (A2.first * A1.second <= A1.first * A2.second) {
        nf[t1] = t3;
        nb[t3] = t1;
        if (nb[t1] != -1) t1 = nb[t1];
      } else
        t1 = nf[t1];
    }
  }
  long long res = 0;
  {
    int t = start;
    while (nf[t] != n) {
      res++;
      t = nf[t];
    }
  }
  cout << res;
}
int main() {
  if (!testing) {
    program();
    return 0;
  }
  FILE* fin = NULL;
  fin = fopen("in.txt", "w+");
  fprintf(fin, "\n3\n-1 0\n0 2\n1 0\n");
  fclose(fin);
  freopen("in.txt", "r", stdin);
  printf("test case(1) => expected : \n");
  printf("2");
  printf("test case(1) => found    : \n");
  program();
  fin = fopen("in.txt", "w+");
  fprintf(fin, "\n5\n1 0\n1 -1\n0 -1\n-1 0\n-1 -1\n");
  fclose(fin);
  freopen("in.txt", "r", stdin);
  printf("test case(2) => expected : \n");
  printf("1");
  printf("test case(2) => found    : \n");
  program();
  return 0;
}
