#include <iostream>
#include <string>
#include <list>
#include <algorithm>
#include <complex>
using namespace std;
double PI = 3.141592653589793238462643383279502884L;
const double EPS = 1e-10;
typedef complex<double> P;
inline bool eql(double a, double b) { return abs(b - a) < EPS; }
inline bool eql(P a, P b) { return eql(a.real(), b.real()) && eql (a.imag(), b.imag());}
inline P unit(P a) { return a/abs(a); }
inline P o15n(P a) { return a * P(0, 1); }
inline double dot(P a, P b) { return a.real()*b.real() + a.imag()*b.imag(); }
inline double cross(P a, P b) { return a.real()*b.imag() - a.imag()*b.real(); }
inline bool orthogp(P a, P b) { return eql(dot(a, b), 0.0); }
inline bool parap(P a, P b) { return eql(cross(a, b), 0.0); }
inline bool onlinep(P start, P end, P p) { return parap(end - start, p - start); }
inline bool onsegp(P start, P end, P p) { return abs(p-start)+abs(end-p) < abs(end-start)+EPS; }
inline double distance(P start, P end, P p) { return abs(cross(end-start, p-start))/abs(end-start); }
inline double distseg(P start, P end, P p) {
  if (dot(end-start, p-start) < EPS) return abs(p-start);
  else if (dot(start-end, p-end) < EPS) return abs(p-end);
  else return distance(start, end, p);
}
inline bool leftp(P start, P end, P p) { return cross(end-start, p-start) < EPS; }
inline bool rightp(P start, P end, P p) { return leftp(end, start, p); }
inline bool intersectp(P as, P ae, P bs, P be) {
  return (leftp(as, ae, bs) && rightp(as, ae, be))
         || (leftp(as, ae, be) && rightp(as, ae, bs));
}
inline bool intersectporig(P as, P ae, P bs, P be) {
  return (cross(ae-as, bs-as)*cross(ae-as, be-as) < EPS)
         && (cross(be-bs, as-bs)*cross(be-bs, ae-bs) < EPS);
}
inline P intersection(P as, P ae, P bs, P be) {
  double das = distance(bs, be, as);
  double dae = distance(bs, be, ae);
  return as + (ae-as)*dae/(das+dae);
}
typedef vector<int> vi;
const int INF = 1e9+7;
#define all(c) (c).begin(), (c).end()
#define tr(c, i) for(auto i = (c).begin(); i != (c).end(); i++)
#define rep(i, n) for(auto i=0;i<(n);i++)
#define pb push_back
#define sz(c) int((c).size())

typedef vector<P> vp;
vp v;

int EnclosePins()
{
  int outside = 0;
  for (int i = 0; i < sz(v); i++) {
    for (int j = 0; j < sz(v); j++) {
      if (i == j)
        continue;
      bool flag = true;
      for (int k = 0; k < sz(v); k++) {
        if (i == k || j == k)
          continue;
        flag = flag && leftp(v[i], v[j], v[k]);
        if (!flag)
          break;
      }
      if (flag) {
        outside++;
        break;
      }
    }
  }
  return sz(v) - outside;
}

int main(int argc, char **argv)
{
  int n;
  double x, y;
  char c;

  for (;;) {
    cin >> n;
    if (!n)
      break;
    v.clear();
    for (int i = 0; i < n; i++) {
      cin >> x >> c >> y;
      v.pb(P(x, y));
    }
    cout << EnclosePins() << endl;
  }
  return 0;
}