#include <iostream>
#include <vector>
#include <cmath>
#include <complex>

using namespace std;

typedef complex<double> P;

#define EPS (1e-10)
#define EQ(a,b) (abs((a)-(b)) < EPS)

double dot(P a, P b) {
  return (a.real() * b.real() + a.imag() * b.imag());
}
double cross(P a, P b) {
  return (a.real() * b.imag() - a.imag() * b.real());
}
int is_orthogonal(P a1, P a2, P b1, P b2) {
  return EQ( dot(a1-a2, b1-b2), 0.0 );
}
int is_parallel(P a1, P a2, P b1, P b2) {
  return EQ( cross(a1-a2, b1-b2), 0.0 );
}

double calcAngle(double a){
	if(a<=0){
		return a+=atan(1.0)*8;
	}
	else{
		return a;
	}
}

int main(){

	//P a=P(1,0);
	//P b=P(-1,1);
	//double tmp=asin((cross(a,b)/(abs(a)*abs(b))));

	int n;
	while(cin>>n&&n!=0){
		P ps[1001];
		bool fucked[1001];
		fill(fucked,fucked+1001,false);
		for(int i = 0; i < n; i++){
			double x,y;
			char ch;
			cin>>x>>ch>>y;
			ps[i]=P(x,y);
		}
		double minX=10000000;
		int initIdx;
		for(int i = 0; i < n; i++){
			// kousin
			if(ps[i].real()<minX){
				minX=ps[i].real();
				initIdx=i;
			}
		}
		// àÁÆàxÀWª¬³¢Æ±ë©çÔÉ©¯Ä¢­
		P bp=ps[initIdx];
		P pp=P(0,1);
		while(1){
			int idx;
			double minD=100000;
			for(int i = 0; i < n; i++){
				// pxðvZ
				double cc=(dot(ps[i]-bp,pp)/(abs(pp)*abs(ps[i]-bp)));
				if((cross(ps[i]-bp,pp)/(abs(pp)*abs(ps[i]-bp)))<0){
					cc=3.14-acos(cc);
					cc=3.14+cc;
				}
				else{
					cc=acos(cc);
				}

				if(minD>cc){
					minD=min(minD,cc);
					idx=i;
				}
			}
			if(fucked[idx])
				break;
			fucked[idx]=true;

			pp=ps[idx]-bp;
			bp=ps[idx];
		}
		int cnt=0;
		for(int i = 0; i < n; i++){
			if(!fucked[i])
				cnt++;
		}
		cout<<cnt<<endl;
	}

	return 0;
}