#include<iostream>
#include<cstdio>
#define _USE_MATH_DEFINES
#include<cmath>
#include<vector>
#include<map>
#include<algorithm>
using namespace std;


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

//誤差を考慮して足し算
double add(double a,double b){
	if(abs(a+b) < EPS*(abs(a)+abs(b)))return 0;
	return a+b;
}
struct P{//2次元ベクトル
	double x,y;
	P(){}
	P(double x,double y):x(x),y(y){}
	P operator + (P p)const{
		return P(add(x,p.x),add(y,p.y));
	}
	P operator - (P p)const{
		return P(add(x,-p.x),add(y,-p.y));
	}
	P operator * (double d)const{
		return P(x*d,y*d);
	}
	P operator / (double d)const{
		return P(x/d,y/d);
	}
	double dot(P p)const{//内積
		return add(x*p.x,y*p.y);
	}
	double det(P p)const{//外積
		return add(x*p.y,-y*p.x);
	}
	bool equal(P p)const{
		return (x-p.x)*(x-p.x)+(y-p.y)*(y-p.y) < EPS*EPS;
	}
};


bool cmp_x(const P& p,const P& q){
	if(p.x!=q.x)return p.x<q.x;
	return p.y<q.y;
}
vector<P> convex_hull(vector<P> ps){
	sort(ps.begin(),ps.end(),cmp_x);
	int k=0;
	vector<P> qs(ps.size()*2);
	for(int i=0;i<ps.size();i++){
		while(k>1 && (qs[k-1]-qs[k-2]).det(ps[i]-qs[k-1]) <= 0 )k--;
		qs[k++]=ps[i];
	}
	for(int i=ps.size()-2,t=k;i>=0;i--){
		while(k>t && (qs[k-1]-qs[k-2]).det(ps[i]-qs[k-1]) <= 0 )k--;
		qs[k++]=ps[i];
	}
	qs.resize(k-1);
	return qs;
}


int main(){
	int n;
	char _;
	while(cin>>n&&n){
		vector<P> ps(n);
		for(int i=0;i<n;i++){
			cin>>ps[i].x>>_>>ps[i].y;
		}
		cout<<ps.size()-convex_hull(ps).size()<<endl;
	}
	return 0;
}