#include <bits/stdc++.h>
using namespace std;
using li = long long;
using ld = long double;
void solve(bool);
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  cout << fixed << setprecision(20);
  solve(true);
  return 0;
}
struct pt {
  li x, y;
  bool operator<(const pt& p) const {
    return make_pair(x, y) < make_pair(p.x, p.y);
  }
};
const int l = 205;
const int maxn = (int)1e5 + 5;
int n, dont[maxn];
pt a[maxn], b[maxn];
li ansp[maxn], ansq[maxn];
inline bool sasdasdsad(li ap, li aq, li bp, li bq) { return ap * bq < bp * aq; }
inline void calc(pt& a, pt& b, li& bp, li& bq) {
  li aksdlas = a.y - a.x * a.x;
  li dsaaksdlas = b.y - b.x * b.x;
  bp = aksdlas - dsaaksdlas;
  bq = a.x - b.x;
  if (bq < 0) {
    bp = -bp;
    bq = -bq;
  }
}
void solve(bool __attribute__((unused)) read) {
  srand(228);
  if (read) {
    cin >> n;
  } else {
    n = 1e5;
  }
  for (int i = 0; i < n; ++i) {
    if (read) {
      cin >> a[i].x >> a[i].y;
    } else {
      a[i].x = (rand() * (li)(1 << 16) + rand()) % (li)1e6;
      a[i].y = rand();
    }
  }
  sort(a, a + n);
  int old_n = n;
  n = 0;
  for (int i = 0; i < old_n; ++i) {
    if (i == 0 || a[i].x != a[i - 1].x)
      b[n++] = a[i];
    else
      b[n - 1] = a[i];
  }
  for (int i = 0; i < n; ++i) {
    a[i] = b[i];
  }
  int ans = 0;
  for (int i = 1; i < n; ++i) {
    li bp = -1, bq = -1;
    li bp1, bq1;
    for (int j = max(0, i - l); j < i; ++j) {
      calc(a[i], a[j], bp1, bq1);
      if (bq == -1 || sasdasdsad(bp1, bq1, bp, bq)) {
        bp = bp1;
        bq = bq1;
      }
      if (!dont[j] && !sasdasdsad(bp1, bq1, ansp[j], ansq[j])) {
        dont[j] = 1;
      }
    }
    ansp[i] = bp;
    ansq[i] = bq;
  }
  for (int i = 1; i < n; ++i) {
    ans += !dont[i];
  }
  cout << ans << "\n";
}
