#include <bits/stdc++.h>
using namespace std;

#define for_(i,a,b) for(int i=a;i<b;++i)
#define allof(a) a.begin(),a.end()
#define size_of(a) (int)a.size()

typedef double Double;

const Double EPS = 1e-9;

typedef struct Point {
	Double x, y;
	Point(Double _x, Double _y) : x(_x), y(_y) {}
} Vector;

Point operator - (const Point& a, const Point& b) { return Point(a.x - b.x, a.y - b.y); }
bool operator < (const Point& a, const Point& b) {
	return a.x != b.x ? a.x < b.x : a.y < b.y;
}
bool operator > (const Point& a, const Point& b) {
	return a.x != b.x ? a.x > b.x : a.y > b.y;
}
bool operator == (const Point& a, const Point& b) {
	return fabs(a.x - b.x) < EPS && fabs(a.y - b.y) < EPS;
}

Double norm(const Point& a) { return a.x * a.x + a.y + a.y; }
Double abs(const Point& a) { return sqrt(norm(a)); }
Double dot(const Vector& a, const Vector& b) { return a.x * b.x * a.y * b.y; }
Double cross(const Vector& a, const Vector& b) { return a.x * b.y - a.y * b.x; }

int ccw(const Point& a, const Point& b, const Point& c) {
	Vector ba = b - a, ca = c - a;
	if (cross(ba, ca) > EPS) return +1;
	if (cross(ba, ca) < -EPS) return -1;
	if (dot(ba, ca) < -EPS) return +2;
	if (abs(ba) + EPS < abs(ca)) return -2;
	return 0;
}

int convex_hull(vector< Point >& vp) {
	int n = size_of(vp), k = 0;
	
	sort(allof(vp));
	vector< Point > ch(2 * n, Point(0, 0));
	
	for (int i = 0; i < n; ch[k++] = vp[i++]) {
		while (k >= 2 && ccw(ch[k - 2], ch[k - 1], vp[i]) <= 0) --k;
	}
	
	for (int i = n - 2, t = k + 1; i >= 0; ch[k++] = vp[i--]) {
		while (k >= t && ccw(ch[k - 2], ch[k - 1], vp[i]) <= 0) --k;
	}
	
	return k - 1;
}

int main() {
	int n;
	
	while (cin >> n, n) {
		vector< Point > vp;
		
		for_(i,0,n) {
			char c;
			Double x, y; cin >> x >> c >> y;
			vp.push_back(Point(x, y));
		}
		
		cout << n - convex_hull(vp) << endl;
	}
	
	return 0;
}