#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<climits>
#include<cmath>
#include<cassert>
#include<string>
#include<vector>
#include<queue>
#include<stack>
#include<set>
#include<map>
#include<algorithm>
#include<utility>
#include<utility>
#include<cmath>
using namespace std;
#define INF (INT_MAX/3-10)

#define X first
#define Y second

typedef long double ld;
typedef pair<ld,ld> P;
int n;

int out_pro(P a,P b) {
  return (a.X * b.Y - b.X * a.Y);
}

int in_pro(P a,P b){
  return (a.X * b.X + a.Y *b.Y);
}

ld pow_len(P a) {
  return a.X * a.X + a.Y * a.Y;
}

ld sqrt_len(P a){
  return sqrt(pow_len(a));
}

P mv(P a,P b) {
  return P(a.X - b.X, a.Y - b.Y);
}


//凸法
vector<P> convex(vector<P> list) {
  if(list.size()<=3)return list;
  sort(list.begin(),list.end());
  vector<P> res;
  res.clear();
  res.push_back(list[0]);
  res.push_back(list[1]);
  res.push_back(list[2]);
  bool v = (out_pro(mv(res[0],res[1]),mv(res[1],res[2]))>0) ;
  for(int i=3;i<list.size();i++){
    for(int j=0;j<res.size();j++){
      int jj = (j+1)%(res.size()-1);
      int jjj = (j+2)%(res.size()-2);
      if(v == (out_pro(mv(res[j],res[jj]),mv(res[jj],list[i]))>0)){
        while(v!=(out_pro(mv(res[jj],list[i]),mv(list[i],res[jjj])))>0&&res.size()>3){
          res.erase(res.begin()+jjj);
        }
        res.insert(res.begin()+jj,list[i]);
        break;
      }
    }
  }/*
  for(int i=0;i<res.size();i++){
    cout<<res[i].X<<" "<<res[i].Y<<endl;
  }*/
  return res;
}


/*
input data
*/
vector<P> list;
void init(){
  list.clear();
}

bool input(){
  int n;
  cin>>n;
  if(n==0)return false;
  for(int i=0;i<n;i++){
    ld x,y;char tmp;
    cin>>x>>tmp>>y;
    list.push_back(P(x,y));
  }
  return true;
}


/*
dp とか
*/
int solve(){
	return list.size()-convex(list).size();
}


int main(){
	for(;init(),input();){
		cout<<solve()<<endl;
	}
}