#include <bits/stdc++.h>
using namespace std;
template <class c>
struct rge {
  c b, e;
};
template <class c>
rge<c> range(c i, c j) {
  return rge<c>{i, j};
}
template <class c>
auto dud(c* x) -> decltype(cerr << *x, 0);
template <class c>
char dud(...);
struct debug {
  template <class c>
  debug& operator<<(const c&) {
    return *this;
  }
};
using ll = long long;
int main() {
  int n;
  scanf("%d", &n);
  vector<pair<int, int>> in(n);
  for (pair<int, int>& p : in) {
    scanf("%d%d", &p.first, &p.second);
  }
  sort(in.begin(), in.end());
  vector<pair<int, int>> only;
  for (int i = 0; i < n; ++i) {
    if (i == n - 1 || in[i + 1].first != in[i].first) {
      only.push_back(in[i]);
    }
  }
  in = only;
  n = in.size();
  debug() << " ["
          << "in"
             ": "
          << (in) << "] ";
  int answer = 0;
  int a = 0;
  while (a != n - 1) {
    auto f = [&](int i) {
      return make_pair(
          (ll)(in[i].first + in[a].first) * (in[i].first - in[a].first) -
              (in[i].second - in[a].second),
          in[i].first - in[a].first);
    };
    ++answer;
    int best = a + 1;
    pair<ll, ll> p_best = f(a + 1);
    for (int b = a + 2; b < n; ++b) {
      pair<ll, ll> p_maybe = f(b);
      if (a == 0) {
        debug() << " ["
                << "b"
                   ": "
                << (b)
                << "] "
                   " ["
                << "p_maybe"
                   ": "
                << (p_maybe) << "] ";
      }
      ll one = p_maybe.first * p_best.second;
      ll two = p_maybe.second * p_best.first;
      if (one <= two) {
        best = b;
        p_best = p_maybe;
      } else if (b % 16 == 0) {
        int memo = in[b].second;
        in[b].second = 1000 * 1000;
        p_maybe = f(b);
        one = p_maybe.first * p_best.second;
        two = p_maybe.second * p_best.first;
        in[b].second = memo;
        if (one > two) {
          break;
        }
      }
    }
    a = best;
  }
  printf("%d\n", answer);
}
