#include <bits/stdc++.h>
using namespace std;
struct Pt {
  long long x, y;
  Pt(long long x_, long long y_) {
    x = x_;
    y = y_;
  }
  bool operator<(const Pt& p) const {
    if (x < p.x) return true;
    if (x > p.x) return false;
    return y > p.y;
  }
  bool contains(const Pt& p) const { return p.y > y + (x - p.x) * (x - p.x); }
};
bool below(Pt p, Pt q, Pt r) {
  long long y21 = q.y - p.y;
  long long y32 = r.y - q.y;
  long long x21 = q.x - p.x;
  long long x32 = r.x - q.x;
  long long x31 = r.x - p.x;
  return y21 * x32 - y32 * x21 + x31 * x21 * x32 > 0;
}
int main() {
  int N;
  scanf("%d", &N);
  vector<Pt> pts;
  for (int i = 0; i < N; ++i) {
    int x, y;
    scanf("%d%d", &x, &y);
    pts.emplace_back(x, y);
  }
  sort(pts.begin(), pts.end());
  vector<Pt> hull;
  hull.push_back(pts[0]);
  for (int i = 1; i < N; ++i) {
    if (pts[i].x == hull.back().x) continue;
    while (hull.size() > 1 &&
           !below(hull[hull.size() - 2], hull.back(), pts[i])) {
      hull.pop_back();
    }
    hull.push_back(pts[i]);
  }
  printf("%d\n", (int)hull.size() - 1);
  return 0;
}
