#include <iostream>
#include <cstdio>
#include <vector>
#include <list>
#include <algorithm>
#include <cmath>
#include <stack>
#include <map>
#include <numeric>
using namespace std;

#define REP(i,n) for(int (i)=0; (i)<(n); (i)++)
#define FOR(i,a,b) for(int (i)=(a); (i)<(b); (i)++)
#define PUSH(n,v) for(int i=0; i<(n); i++) {int j; cin >> j; v.push_back(j);}
#define ALL(v) v.begin(), v.end()
#define print(s) cout << (s) << endl

typedef pair<double,double> xy;
const double INF = 1e9;

double getTilt(xy p, xy q) {
    if (p.first == q.first && p.second == q.second) {
        return -INF;
    }else if (p.first == q.first) {
        return INF;
    }else {
        return (q.second-p.second)/(q.first-p.first);
    }
}

void solve68(int n) {
    vector<xy> points;
    double x,y;
    REP(i,n) {
        scanf("%lf,%lf",&x,&y);
        points.push_back(make_pair(x, y));
    }
    sort(ALL(points));
    vector<xy> peri;
    peri.push_back(points[0]);
    double maxTilt;
    double tmpMax;
    int tmpMaxPoint;
    double tilt;
    maxTilt = 2*INF;
    while(!(peri.size() >= 4 && peri.front() == peri.back())) {
        tmpMax = -INF;
        tmpMaxPoint = -1;
        xy back = peri.back();
        REP(i,points.size()) {
            tilt = getTilt(back, points[i]);
            if (tilt < maxTilt && tilt > tmpMax) {
                tmpMax = tilt;
                tmpMaxPoint = i;
            }
        }
        if (tmpMaxPoint == -1) {
            maxTilt = 2*INF;
            tmpMax = INF;
        }else {
            maxTilt = tmpMax;
            peri.push_back(points[tmpMaxPoint]);
        }
    }
    cout << n - peri.size() + 1 << endl;
}

int main() {
    int n;
    while (cin >> n, n) {
        solve68(n);
    }
    return 0;
}