#include <bits/stdc++.h>
using namespace std;
vector<pair<long long, long long> > hull;
long long cross(pair<long long, long long> A, pair<long long, long long> B,
                pair<long long, long long> C) {
  return (B.first - A.first) * (C.second - A.second) -
         (B.second - A.second) * (C.first - A.first);
}
void convex_hull(vector<pair<long long, long long> > pts) {
  hull.clear();
  sort(pts.begin(), pts.end());
  for (long long i = 0; i < (long long)pts.size(); i++) {
    while ((long long)hull.size() >= 2 &&
           cross(hull[(long long)hull.size() - 2], hull.back(), pts[i]) <= 0)
      hull.pop_back();
    hull.push_back(pts[i]);
  }
  int s = (long long)hull.size();
  for (int i = pts.size() - 2; i >= 0; i--) {
    while ((long long)hull.size() >= s + 1 &&
           cross(hull[(long long)hull.size() - 2], hull.back(), pts[i]) <= 0)
      hull.pop_back();
    hull.push_back(pts[i]);
  }
}
int main() {
  vector<pair<long long, long long> > a;
  long long n;
  cin >> n;
  for (long long i = 0; i < n; i++) {
    long long first, second;
    cin >> first >> second;
    a.push_back({first, second - first * first});
  }
  int f = 1;
  for (long long i = 0; i < n - 1; i++)
    if (a[i].first != a[i + 1].first) f = 0;
  if (f) {
    cout << 0;
    return 0;
  }
  sort(a.begin(), a.end());
  convex_hull(a);
  long long n1 = (long long)hull.size();
  set<long double> s;
  long long ia = 0, ib = 0;
  for (long long i = 1; i < n1; i++)
    if (hull[i].first > hull[ia].first) ia = i;
  for (long long i = 1; i < n1; i++)
    if (hull[i].first < hull[ib].first) ib = i;
  if (n1 < 2) cout << 0;
  while (ia != ib) {
    if (hull[ia].first == hull[(ia + 1) % n1].first) {
      ia = (ia + 1) % n1;
      continue;
    }
    s.insert((hull[(ia + 1) % n1].second - hull[ia].second) /
             (1.0 * hull[(ia + 1) % n1].first - hull[ia].first));
    ia = (ia + 1) % n1;
  }
  cout << (long long)s.size();
  return 0;
}
