#include <iostream>
#include <cstdio>
#include <cstring>
#include <sstream>
#include <algorithm>
#include <math.h>
#include <map>
#include <functional>
#include <iomanip>
#include <vector>
#include <queue>
#include <stack>
#include <set>
#include <typeinfo>
#define PI 3.14159265359
#define INF 99999999
#define rep(i, n) for(int i=0; i<n; i++)
#define REP(n) rep(i, n)
#define pb push_back
#define mp make_pair
typedef long long ll;
using namespace std;
//typedef pair<int, int> P;

struct point
{
	double x, y;
};

inline void swap(point a[], int i, int j)
{
	point t = a[i]; a[i] = a[j]; a[j] = t;
}

double theta(point p1, point p2)
{
	int dx, dy, ax, ay;
	double t;
	dx = p2.x - p1.x; ax = abs(dx);
	dy = p2.y - p1.y; ay = abs(dy);
	t = (ax + ay == 0) ? 0 : (double) dy / (ax + ay);
	if (dx < 0) t = 2 - t; else if (dy < 0) t = 4 + t;
	return t * 90.0;
}

int wrap(point p[], int N)
{
	int i, min, M;
	double th, v;
	for (min=0, i=1; i<N; i++)
	{
		if (p[i].y <p[min].y) min = i;
	}
	p[N] = p[min]; th = 0.0;
	for (M=0; M<N; M++)
	{
		swap(p, M, min);
		min = N; v = th; th = 360.0;
		for (i=M+1; i<=N; i++)
		{
			if (theta(p[M], p[i]) > v)
			{
				if (theta(p[M], p[i]) < th)
				{
					min = i; th = theta(p[M], p[min]);
				}
			}
		}
		if (min == N) return M;
	}
}

int n;
point P[100];
char comma;

int main()
{
	while (cin >> n, n)
	{
		rep(i, n)
		{
			cin >> P[i].x >> comma >> P[i].y;
		}
		cout << n - wrap(P, n) - 1 << endl;
	}
	
	return 0;
}