#include<bits/stdc++.h>
using namespace std;

using ld=long double;
using Point=complex<ld>;
const ld eps=1e-9;
ld dot(Point a,Point b){return real(conj(a)*b);}
ld cross(Point a,Point b){return imag(conj(a)*b);}

bool comp(Point lhs,Point rhs){
    return lhs.real()<rhs.real() || lhs.real()==rhs.real() && lhs.imag()<rhs.imag();
}
int ccw(Point a,Point b,Point c){
    b-=a;c-=a;
    if(cross(b,c)>eps) return 1;
    if(cross(b,c)<eps) return -1;
    if(dot(b,c)<0) return 2;
    if(norm(b)<norm(c)) return -2;
    return 0;
}

vector<Point> convexHull(vector<Point> &p){
    int n=p.size();
    int k=0;
    vector<Point> ch(n*2);
    sort(p.begin(),p.end(),comp);
    for(int i=0;i<n;ch[k++]=p[i++]) 
        while(k>=2 && ccw(ch[k-2],ch[k-1],p[i])<=0) --k;
    for(int i=n-2,t=k+1;i>=0;ch[k++]=p[i--]) 
        while(k>=t && ccw(ch[k-2],ch[k-1],p[i])<=0) --k;
    ch.resize(k-1);
    return ch;
}

int main(){
    int n;
    while(cin>>n,n){
        vector<Point> xy(n);
        for(int i=0;i<n;i++){
            double x,y;
            scanf("%lf,%lf",&x,&y);
            xy[i]=Point(x,y);
        }
        vector<Point> ch=convexHull(xy);
        ld res=0;
        for(int i=0;i<ch.size();i++){
            res+=norm(ch[i]-ch[(i+1)%ch.size()]);
        }
        cout<<n-ch.size()<<endl;
    }

    return 0;
}