#include<iostream>
#include<cmath>
#include<utility>
#include<vector>
#include<map>

using namespace std;

typedef pair<double,double> PBB;
typedef vector<PBB > VPBB;
typedef map<double,int> MDI;
typedef MDI::iterator MDII;

#define PUSH push_back
#define MDIVT MDI::value_type
#define PI 3.14159265359
#define INF 10000000000
#define NMAX 100


int main(){

	int n;
	int max;
	int ans;
	int cnt;
	double x,y;
	double hx,hy,ix,iy,jx,jy;
	char gav;
	VPBB pin;
	MDI point;

	while(1){

		/*入力*/
		cin>>n;

		/*終了*/
		if(n==0) break;

		/*準備*/
		for(int i=0;i<n;i++){
			cin>>x>>gav>>y;
			pin.PUSH(PBB(x,y));
		}
		ans=0;

		/*端の点を決める*/
		max=0;
		for(int i=1;i<n;i++){
			if(pin[max].second<pin[i].second) max=i;
			else if(pin[max].second==pin[i].second&&pin[max].first<pin[i].first) max=i;
		}

		/*基準点との角度から順番を付ける*/
		for(int i=0;i<n;i++){
			if(i!=max){
				point.insert(MDIVT(atan2(pin[i].second-pin[max].second,pin[i].first-pin[max].first),i));
			}
		}
		point.insert(MDIVT(-1*INF,max));

		/*3点の角度から凸包を求めていく*/
		MDII iH=point.begin(),iI=point.begin(),iJ=point.begin();
		iI++,iJ++,iJ++;
		cnt=0;
		while(iJ!=point.end()){
			hx=pin[(*iH).second].first,hy=pin[(*iH).second].second;
			ix=pin[(*iI).second].first,iy=pin[(*iI).second].second;
			jx=pin[(*iJ).second].first,jy=pin[(*iJ).second].second;

			/*cout<<(*iH).second<<" "<<(*iI).second<<" "<<(*iJ).second<<" "<<(jx-ix)*(hy-iy)-(jy-iy)*(hx-ix)<<endl; ///debug*/

			if((jx-ix)*(hy-iy)-(jy-iy)*(hx-ix)>0){
				iH++,iI++,iJ++;
				while(cnt--) iH++;
				cnt=0;
			}
			else{
				iI++;
				iJ++;
				cnt++;
				ans++;
			}
		}

		/*出力*/
		cout<<ans<<endl;

		/*初期化*/
		pin.clear();
		point.clear();
	}

}