#include <bits/stdc++.h>
#define x real() 
#define y imag()
#define px second
#define py first
using namespace std;
typedef complex<double> point;
typedef pair <double,double> P;
P G[100001];
vector <P> stc;
vector <point> pol;
 
bool eq(double a,double b){return (abs(a-b)<=(1e-9));}
bool on_segment(point a,point b,point c){return eq(abs(b-a),abs(a-c)+abs(b-c));}
double get_r(point a,point b,point c){
  b-=a,c-=a;
  b*=conj(c);
  return arg(b);
}
int solve(point a){
  for(int i=0;i<(int)pol.size();i++)
    if(on_segment(pol[i],pol[(i+1)%pol.size()],a)) return 1;
  
  double sum=0;
  for(int i=0;i<(int)pol.size();i++)sum+=get_r(a,pol[i],pol[(i+1)%pol.size()]);
  
  if(eq(sum,0))return 0;
  return 2;
}
//
 
int ccw(point a,point b,point c) {
  point ab=b-a, ac =c-a;
  point d =ac*conj(ab); 
  if(d.y > 0) return true;
  return false;
}

int mk(int i,int flg) {
  point av = point(stc[stc.size()-2].px,stc[stc.size()-2].py);
  point bv = point(stc[stc.size()-1].px,stc[stc.size()-1].py);
  point cv = point(G[i].px,G[i].py);
  if(ccw(av,bv,cv) && stc.size()!=1)stc.pop_back(),i+=flg;
  else  stc.push_back(G[i]);
  return i;
}

int main() {
  int n;
  while(cin >> n,n){
    pol.clear();
    stc.clear();
    for(int i=0;i<n;i++)scanf("%lf,%lf",&G[i].px,&G[i].py);
    sort(G,G+n);
   
    stc.push_back(G[0]),stc.push_back(G[1]);
    for(int i=2;i<n;i++) i=mk(i,-1);
    for(int i=n-2;i>=0;i--) i=mk(i,1);

    
    int ans=0;
    for(int i=0;i<(int)stc.size()-1;i++) pol.push_back(point(stc[i].px,stc[i].py));

    for(int i=0;i<n;i++) ans+=(solve(point(G[i].px,G[i].py))==2);
    cout <<ans<<endl;
  }
  return 0;
}