#include<complex>
#include<iostream>
#include<vector>
#include<utility>
#include<algorithm>
using namespace std;
typedef long double ld;
typedef complex<ld> P;
#define X real
#define Y imag
vector<P> data;
namespace std{
bool operator<(P a,P b){
return a.X()!=b.X()? a.X()<b.X():a.Y()<b.Y();
}
}
double cross(P a,P b){
return imag(conj(a)*b);
}
double dot(P a,P b){
return real(conj(a)*b);
}
int ccw(P a,P b,P c){
b-=a;c-=a;
if(cross(b,c)>0)return 1; //counter clockwise
if(cross(b,c)<0)return -1; //clockwise
if(dot(b,c)<0)return 2; //c--a--b on line
if(norm(b)<norm(c))return -2; //a--b--c on line
return 0;
}
vector<P> convex_hull(vector<P> ps){
sort(ps.begin(),ps.end());
vector<P> ch(ps.size()*2);
int k=0;
for(int i=0;i<ps.size();ch[k++]=ps[i++]){
while(k>=2 && ccw(ch[k-2],ch[k-1],ps[i])<=0)--k;
}
for(int i=ps.size()-2,t=k+1;i>=0;ch[k++]=ps[i--]){
while(k>=t&&ccw(ch[k-2],ch[k-1],ps[i])<=0)--k;
}
ch.resize(k-1);
return ch;
}
int solve(){
vector<P> res = convex_hull(data);
return res.size();
}
int main(){
int n;
while(cin>>n){
if(n==0)break;
data.clear();
for(int i=0;i<n;i++){
ld a,b;
char c;
cin>>a>>c>>b;
data.push_back(P(a,b));
}
cout<<n-solve()<<endl;
}
}