#include <bits/stdc++.h>

using namespace std;

#define FOR(i,a,b) for(int i=(a);i<(b);i++)
#define REP(i,n) FOR(i,0,n)
#define ALL(v) (v).begin(),(v).end()
#define fi first
#define se second

template<typename A, typename B> inline bool chmax(A &a, B b) { if (a<b) { a=b; return 1; } return 0; }
template<typename A, typename B> inline bool chmin(A &a, B b) { if (a>b) { a=b; return 1; } return 0; }

typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef pair<int, pll> pip;
const ll INF = 1ll<<30;
const ll MOD = 1000000007;
const double EPS  = 1e-10;

typedef complex<double> P;
typedef complex<double> Vec;

double cross(Vec a, Vec b) {
	return a.real() * b.imag() - a.imag() * b.real();
}

bool comp(P a, P b) {
	if (a.real() != b.real()) return a.real() < b.real();
	return a.imag() < b.imag();
}

vector<P> convex_full(vector<P> p) {
	sort(ALL(p), comp);
	
	vector<P> res(2 * p.size());
	int k = 0;
	
	// ?????´??????
	REP(i, p.size()) {
		while (k > 1 && cross(res[k - 1] - res[k - 2], p[i] - res[k - 2]) <= 0) k--;
		res[k++] = p[i];
	}
	
	// ?????´??????
	for (int i = (int)p.size() - 2, c1 = k; i >= 0; i--) {
		while (k > c1 && cross(res[k - 1] - res[k - 2], p[i] - res[k - 2]) <= 0) k--;
		res[k++] = p[i];
	}
	
	res.resize(k - 1);
	return res;
}

int main() {
	int n;
	while (cin >> n, n) {
		vector<P> p(n);
		REP(i, n) {
			double x, y;
			scanf("%lf,%lf", &x, &y);
			p[i] = P(x, y);
		}
		
		vector<P> cf = convex_full(p);
		
		printf("%d %d\n", p.size(), cf.size());
		
		cout << p.size() - cf.size() << endl;
	}
	return 0;
}