#include <bits/stdc++.h>
const int INF_INT = 0x3f3f3f3f;
const long long INF_LL = 0x7f7f7f7f;
const int MOD = 1e9 + 7;
const double eps = 1e-10;
const double pi = acos(-1);
using namespace std;
struct Point {
  double x, y;
  Point(double x = 0, double y = 0) : x(x), y(y) {}
  void read() { scanf("%lf%lf", &x, &y); }
  void print() { printf("x=%lf y=%lf\n", x, y); }
};
double DistanceToPoint(const Point& a, const Point& b) {
  double dx = a.x - b.x;
  double dy = a.y - b.y;
  return sqrt(dx * dx + dy * dy);
}
Point operator+(const Point& A, const Point& B) {
  return Point(A.x + B.x, A.y + B.y);
}
Point operator-(const Point& A, const Point& B) {
  return Point(A.x - B.x, A.y - B.y);
}
Point operator*(const Point& A, const double p) {
  return Point(A.x * p, A.y * p);
}
Point operator/(const Point& A, const double p) {
  return Point(A.x / p, A.y / p);
}
bool operator<(const Point& A, const Point& B) {
  return A.x < B.x || (A.x == B.x && A.y < B.y);
}
int dcmp(double x) {
  if (fabs(x) < eps)
    return 0;
  else
    return x < 0 ? -1 : 1;
}
bool operator==(const Point& A, const Point& B) {
  return dcmp(A.x - B.x) == 0 && dcmp(A.y - B.y) == 0;
}
double Dot(const Point& A, const Point& B) { return A.x * B.x + A.y * B.y; }
double Length(const Point& A) { return sqrt(Dot(A, A)); }
double Angle(const Point& A, const Point& B) {
  return acos(Dot(A, B) / Length(A) / Length(B));
}
double Cross(const Point& A, const Point& B) { return A.x * B.y - A.y * B.x; }
double Area2(const Point& A, const Point& B, const Point& C) {
  return Cross(B - A, C - A);
}
Point Rotate(const Point& A, const double rad) {
  return Point(A.x * cos(rad) - A.y * sin(rad),
               A.x * sin(rad) + A.y * cos(rad));
}
Point Normal(const Point& A) {
  double L = Length(A);
  return Point(-A.y / L, A.x / L);
}
Point GetLineIntersection(const Point& P, const Point& v, const Point& Q,
                          const Point& w) {
  Point u = P - Q;
  double t = Cross(w, u) / Cross(v, w);
  return P + v * t;
}
double DistanceToLine(const Point& P, const Point& A, const Point& B) {
  Point v1 = B - A, v2 = P - A;
  return fabs(Cross(v1, v2)) / Length(v1);
}
double DistanceToSegment(const Point& P, const Point& A, const Point& B) {
  if (A == B) return Length(P - A);
  Point v1 = B - A, v2 = P - A, v3 = P - B;
  if (dcmp(Dot(v1, v2)) < 0)
    return Length(v2);
  else if (dcmp(Dot(v1, v3)) > 0)
    return Length(v3);
  else
    return fabs(Cross(v1, v2)) / Length(v3);
}
Point GetLineProjection(const Point& P, const Point& A, const Point& B) {
  Point v = B - A;
  return A + v * (Dot(v, P - A) / Dot(v, v));
}
bool SegmentProperIntersection(const Point& a1, const Point& a2,
                               const Point& b1, const Point& b2) {
  double c1 = Cross(a2 - a1, b1 - a1), c2 = Cross(a2 - a1, b2 - a1);
  double c3 = Cross(b2 - b1, a1 - b1), c4 = Cross(b2 - b1, a2 - b1);
  return dcmp(c1) * dcmp(c2) < 0 && dcmp(c3) * dcmp(c4) < 0;
}
bool OnSegment(const Point& P, const Point& A, const Point& B) {
  return dcmp(Cross(A - P, B - P)) == 0 && dcmp(Dot(A - P, B - P)) < 0;
}
bool SegmentIntersection(const Point& a1, const Point& a2, const Point& b1,
                         const Point& b2) {
  double c1 = Cross(a2 - a1, b1 - a1), c2 = Cross(a2 - a1, b2 - a1);
  double c3 = Cross(b2 - b1, a1 - b1), c4 = Cross(b2 - b1, a2 - b1);
  if (dcmp(c1) * dcmp(c2) < 0 && dcmp(c3) * dcmp(c4) < 0)
    return true;
  else if (dcmp(c1) == 0 && OnSegment(b1, b2, a1))
    return true;
  else if (dcmp(c2) == 0 && OnSegment(b1, b2, a2))
    return true;
  else if (dcmp(c3) == 0 && OnSegment(a1, a2, b1))
    return true;
  else if (dcmp(c4) == 0 && OnSegment(a1, a2, b2))
    return true;
  return false;
}
double ConvexPolygonArea(Point* p, int n) {
  double area = 0;
  for (int i = 1; i < n - 1; i++) area += Cross(p[i] - p[0], p[i + 1] - p[0]);
  return area / 2.0;
}
double PolygonArea(Point* p, int n) {
  double area = 0;
  for (int i = 1; i < n - 1; i++) area += Cross(p[i] - p[0], p[i + 1] - p[0]);
  return area / 2.0;
}
int n;
Point p[1010];
int get(int x) {
  if (x + 1 > n + 1)
    x = 1;
  else
    x = x + 1;
  return x;
}
int main(int argc, char const* argv[]) {
  while (scanf("%d", &n) == 1) {
    for (int i = 1; i <= n + 1; i++) p[i].read();
    int ans = 0;
    for (int i = 1; i <= n; i++) {
      int a = get(i);
      int b = get(a);
      if (Cross(p[a] - p[i], p[b] - p[a]) > 0) ans++;
    }
    cout << ans << endl;
  }
  return 0;
}
