#include <iostream>
#include <stdio.h>
#include <string>
#include <sstream>
#include <fstream>
#include <iterator>
#include <stdlib.h>
#include <map>
#include <queue>
#include <vector>
#include <functional>
#include <set>
#include <list>
#include <algorithm>
#include <math.h>

using namespace std;

// vector cout
template<typename _Ty>
ostream& operator << (ostream& os, const vector<_Ty>& v) {
	os << "{";
	for (size_t i = 0; i < v.size(); i++)
	{
		if (i != 0) os << ", ";
		os << v[i];
	}
	os << "}";

	return os;
}

//point
class Point {
public:
	double x;
	double y;

	Point() {
		x = 0; y = 0;
	}
	Point(int x, int y) {
		this->x = x; this->y = y;
	}

	bool operator== (const Point& a) {
		if (x != a.x) return false;
		if (y != a.y) return false;
		return true;
	}

	bool operator !=(const Point& a) {
		if (x != a.x) return true;
		if (y != a.y) return true;
		return false;
	}

	bool operator < (const Point& a) {
		if (x == a.x) return (y < a.y);
		return x < a.x;
	}
};


//point cout
ostream& operator << (ostream& os, const Point& p) {
	return os << "(" << p.x << ", " << p.y << ")";
}


//AB ?? AC
double crossProduct(Point A, Point B, Point C) {
	return (B.x - A.x)*(C.y - A.y) - (B.y - A.y)*(C.x - A.x);
}

double distanceSquare(Point A, Point B) {
	return (A.x - B.x)*(A.x - B.x) + (A.y - B.y)*(A.y - B.y);
}

//S:????????????????????????
int convexhull(vector<Point>& S)
{
	//L:??????????§?????????????????????????
	vector<Point> L;

	//sort
	sort(S.begin(), S.end());

	Point A, B, C;

	A = S[0];
	do {
		L.push_back(A);
		B = S[0];
		for (int i = 1; i < S.size(); i++){
			C = S[i];
			if (B == A) B = C;
			else {
				double v = crossProduct(A, B, C);
				if (v > 0 || ((fabs(v) < 1e-8) && (distanceSquare(A, C) > distanceSquare(A, B)))) B = C;
			}
		}
		A = B;
	} while (A != L[0]);

	return S.size() - L.size();
}

int main() {

	while (1) {

		int n;
		vector<Point> Points;
		cin >> n;
		if (n == 0) break;
		for (int i = 0; i < n; i++) {
			Point p;
			string input;
			cin >> input;

			stringstream ss(input);

			ss >> p.x;
			ss.ignore();
			ss >> p.y;

			Points.push_back(p);
		}
		cout << convexhull(Points) << endl;
	}
	
	return 0;
}