#include <bits/stdc++.h>
using namespace std;
using cd = complex<double>;
const long long modd = 1e9 + 7, maxn = 5e5 + 2;
const double pi = acos(-1);
long long id1, id2;
struct point {
  double x, y;
};
bool cw(point a, point b, point c) {
  return a.x * (b.y - c.y) + b.x * (c.y - a.y) + c.x * (a.y - b.y) < 0;
}
bool ccw(point a, point b, point c) {
  return a.x * (b.y - c.y) + b.x * (c.y - a.y) + c.x * (a.y - b.y) > 0;
}
bool cmp(point a, point b) { return a.x < b.x || (a.x == b.x && a.y < b.y); }
void convex_hull(vector<point> &a) {
  if (a.size() == 1) {
    return;
  }
  sort(a.begin(), a.end(), cmp);
  point p1 = a[0];
  point p2 = a.back();
  vector<point> upper, lower;
  upper.push_back(p1);
  lower.push_back(p1);
  for (long long i = 1; i < (long long)a.size(); ++i) {
    if (i == a.size() - 1 || cw(p1, a[i], p2)) {
      while (upper.size() >= 2 &&
             !cw(upper[upper.size() - 2], upper[upper.size() - 1], a[i])) {
        upper.pop_back();
      }
      upper.push_back(a[i]);
    }
    if (i == a.size() - 1 || ccw(p1, a[i], p2)) {
      while (lower.size() >= 2 &&
             !ccw(lower[lower.size() - 2], lower[lower.size() - 1], a[i])) {
        lower.pop_back();
      }
      lower.push_back(a[i]);
    }
  }
  vector<point> ans;
  for (long long i = 0; i < (long long)upper.size(); i++) {
    ans.push_back(upper[i]);
  }
  for (long long i = (long long)lower.size() - 2; i > 0; i--) {
    ans.push_back(lower[i]);
  }
  id1 = 0;
  id2 = (long long)upper.size() - 1;
  while (id1 + 1 < (long long)ans.size() && ans[id1 + 1].x == ans[id1].x) {
    id1++;
  }
}
void solve() {
  long long n, m, i, j;
  cin >> n;
  vector<point> a(n);
  for (i = 0; i < n; ++i) {
    double x, y;
    cin >> x >> y;
    y -= x * x;
    a[i].x = x;
    a[i].y = y;
  }
  convex_hull(a);
  cout << id2 - id1;
}
signed main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  solve();
}
