#include <bits/stdc++.h>
using namespace std;
struct INFO {
  long long x, y;
  long long p, q;
  INFO(long long x1 = 0, long long y1 = 0) : x(x1), y(y1), p(1), q(0) {}
};
bool comp(const INFO &A, const INFO &B) {
  if (1LL * A.q * B.p != 1LL * A.p * B.q)
    return 1LL * A.q * B.p < 1LL * A.p * B.q;
  if (A.y != B.y) return A.y < B.y;
  return A.x < B.x;
}
long long ccw(const INFO &A, const INFO &B, const INFO &C) {
  return 1LL * (A.x * B.y + B.x * C.y + C.x * A.y - B.x * A.y - C.x * B.y -
                A.x * C.y);
}
int n;
vector<INFO> p;
int main() {
  cin >> n;
  for (int i = 1; i < n + 1; i++) {
    long long x, y;
    scanf(" %lld", &x);
    ;
    scanf(" %lld", &y);
    ;
    p.push_back({x, y - (x * x)});
  }
  if (n == 1) {
    cout << 0 << endl;
    return 0;
  }
  sort(p.begin(), p.end(), comp);
  for (int i = 1; i < n; i++) {
    p[i].p = p[i].x - p[0].x;
    p[i].q = p[i].y - p[0].y;
  }
  sort(p.begin() + 1, p.end(), comp);
  stack<int> s;
  s.push(0);
  s.push(1);
  int next = 2;
  while (next < n) {
    while (s.size() >= 2) {
      int first, second;
      second = s.top();
      s.pop();
      first = s.top();
      if (ccw(p[first], p[second], p[next]) > 0) {
        s.push(second);
        break;
      }
    }
    s.push(next++);
  }
  vector<int> v;
  while (!s.empty()) {
    v.push_back(s.top());
    s.pop();
  }
  v.push_back(v[0]);
  int ans = 0;
  for (int i = 1; i < v.size(); i++) {
    if (p[v[i]].x > p[v[i - 1]].x) ans++;
  }
  cout << ans << endl;
  return 0;
}
