#include<bits/stdc++.h>
using namespace std;
template<typename T = int>T in() { T x; cin >> x; return x; }
#define REP(i,n) for(int i=0;i<(n);++i)
#define _REP(i,n)for(int i=1;i<=(n);++i)
#define REPC(i,c)for(auto i:c)
struct vec2d
{
	double x, y;
	vec2d() {}
	vec2d(double _x, double _y) :x(_x), y(_y) {}
	double norm()const
	{
		return hypot(x, y);
	}
	double operator*(const vec2d&v)const
	{
		return x * v.x + y * v.y;
	}
	vec2d operator-(const vec2d&v)const
	{
		return vec2d(x - v.x, y - v.y);
	}
	bool operator==(const vec2d&v)const
	{
		return x == v.x && y == v.y;
	}
	bool operator!=(const vec2d&v)const
	{
		return !operator==(v);
	}
	static double cos_arg(const vec2d&v1, const vec2d&v2)
	{
		return v1 * v2 / v1.norm() / v2.norm();
	}
};
int main()
{
	for (int n = in(); n != 0; n = in())
	{
		vector<vec2d>v(n);
		int min_x_idx;
		double min_x = 2000;
		REP(i, n)
		{
			v[i].x = in<double>();
			in<char>();
			v[i].y = in<double>();
			if (min_x > v[i].x)
			{
				min_x = v[i].x;
				min_x_idx = i;
			}
		}
		vector<vec2d>wrap;
		wrap.push_back(v[min_x_idx]);
		auto previous = vec2d(v[min_x_idx].x, -2000);
		while (true)
		{
			int max_cos_idx;
			double max_cos = -10;
			REP(i, v.size())
			{
				if (v[i] != wrap.back() && v[i] != previous)
				{
					double cosine = vec2d::cos_arg(wrap.back() - previous, v[i] - wrap.back());
					if (max_cos < cosine)
					{
						max_cos = cosine;
						max_cos_idx = i;
					}
				}
			}
			if (v[max_cos_idx] == wrap.front())break;
			previous = wrap.back();
			wrap.push_back(v[max_cos_idx]);
		}
		cout << v.size() - wrap.size() << endl;
	}
}
