#include <bits/stdc++.h>
using namespace std;
int i, j, k, l, n, m, s, an, sum;
const double eps = 1e-7;
const double oo = 2e9;
const int N = 2100;
class arr {
 public:
  double x, y;
} a[N], t[N * 2];
bool com(const arr &o, const arr &p) { return o.x < p.x; }
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%lf%lf", &a[i].x, &a[i].y);
  if (a[2].x < a[1].x) {
    for (int i = 1; i <= n; i++) {
      a[i].x = -a[i].x;
      a[i].y = -a[i].y;
      if (fabs(a[i].x) < eps) a[i].x = 0;
      if (fabs(a[i].y) < eps) a[i].y = 0;
    }
  }
  a[n + 1] = a[1];
  for (int i = 3; i <= n; i++) {
    double b, k, xx;
    if (a[i].x == a[i + 1].x) {
      if (a[i].y > a[i + 1].y)
        xx = -oo;
      else
        xx = a[i].x;
    } else {
      k = (a[i].y - a[i + 1].y) / (a[i].x - a[i + 1].x);
      b = a[i].y - a[i].x * k;
      if (k == 0) {
        if (a[i].x > a[i + 1].x)
          xx = -oo;
        else
          xx = oo;
      } else
        xx = (a[1].y - b) / k;
      if (a[i + 1].y < a[i].y) xx = -oo;
    }
    xx = floor(xx + 1.0 - eps);
    t[++s].x = xx;
    t[s].y = 1;
    if (a[i].x == a[i - 1].x) {
      if (a[i].y > a[i - 1].y)
        xx = oo;
      else
        xx = a[i].x;
    } else {
      k = (a[i].y - a[i - 1].y) / (a[i].x - a[i - 1].x);
      b = a[i].y - a[i].x * k;
      if (k == 0) {
        if (a[i].x < a[i - 1].x)
          xx = oo;
        else
          xx = -oo;
      } else
        xx = (a[1].y - b) / k;
      if (a[i - 1].y < a[i].y) xx = oo;
    }
    xx = floor(xx) + 1;
    t[++s].x = xx;
    t[s].y = -1;
  }
  sort(&t[1], &t[s + 1], com);
  int ss = 0;
  an = 0;
  for (int i = 1; i <= s; i++) {
    ss += int(t[i].y);
    if ((t[i].x >= a[1].x) && (ss == n - 2)) {
      for (int j = i + 1; j <= s; j++)
        if (t[j].y == -1) {
          an = int(t[j].x - t[i].x);
          break;
        }
      break;
    }
    if (t[i].x > a[2].x) break;
  }
  printf("%d", an);
  return 0;
}
