#include <cstdio>
#include <complex>

using namespace std;

#define MAX_N 100

typedef complex<double> P;
#define EPS (1e-10)
#define EQ(a,b) (abs((a) - (b)) < EPS)
#define EQV(a,b) (EQ((a).real(), (b).real()) && EQ((a).imag(), (b).imag()))

double cross(P a, P b) {
  return (a.real() * b.imag() - a.imag() * b.real());
}

int side(P start, P end, P point) {
  double arg = cross(end - start, point - start);
  if (arg > 0) return 1;  // left
  if (arg < 0) return -1; // right
  return 0; // center
}

int n;
P p[MAX_N];

int next_vertex(int start_index) {
  for (int i = 0; i < n; ++i) {
    if (start_index == i) continue;
    bool right = false;
    for (int j = 0; j < n; ++j) {
      if (i == j) continue;
      if (side(p[start_index], p[i], p[j]) == -1) right = true;
    }
    if (!right) return i;
  }
  return start_index;
}

int main() {
  while (1) {
    scanf("%d\n", &n);
    if (!n) break;
    
    for (int i = 0; i < n; ++i) {
      double x, y;
      scanf("%lf,%lf\n", &x, &y);
      p[i] = P(x, y);
    }
    
    int pm = 0;
    for (int i = 0; i < n; ++i) {
      if (p[pm].real() > p[i].real()) pm = i;
    }
    
    int start = pm;
    int current = next_vertex(start);
    int count = 1;
    
    while (start != current) {
      current = next_vertex(current);
      count++;
    }
    printf("%d\n", n - count);
  }
  return 0;
}