#include <iostream>
#include <sstream>
#include <iomanip>
#include <algorithm>
#include <cmath>
#include <string>
#include <vector>
#include <list>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <bitset>
#include <numeric>
#include <climits>
#include <cfloat>
using namespace std;

class Point
{
public:
    double y, x;
    Point(){}
    Point(double y0, double x0){
        y = y0;
        x = x0;
    }
    const Point operator-(const Point& p) const{
        return Point(y - p.y, x - p.x);
    }
    double cross(const Point& p) const{
        return x * p.y - y * p.x;
    }
    bool operator<(const Point& p) const{
        return x < p.x || (x == p.x && y < p.y);
    }
};

void convexHull(const vector<Point>& p1, vector<Point>& p2)
{
    vector<Point> p = p1;
    sort(p.begin(), p.end());
    int n = p.size();

    int j = 0;
    p2.clear();
    for(int i=0; i<2*n-1; ++i){
        Point tmp = (i<n? p[i]:p[2*(n-1)-i]);
        while(j >= 2 && (tmp-p2[j-2]).cross(p2[j-1]-p2[j-2]) < 0){
            p2.pop_back();
            -- j;
        }
        p2.push_back(tmp);
        ++ j;
    }
    p2.pop_back();
}

int main()
{
    for(;;){
        int n;
        cin >> n;
        if(n == 0)
            return 0;

        char c;
        vector<Point> p1(n), p2;
        for(int i=0; i<n; ++i)
            cin >> p1[i].x >> c >> p1[i].y;

        convexHull(p1, p2);
        cout << (n-p2.size()) << endl;
    }
}