#include <iostream>
#include <cstdlib>
#include <vector>
#include <cstdio>
#include <algorithm>
#include <complex>
#define EPS (1e-5)

using namespace std;

typedef complex<double> P;
P p[100];
int n;

vector<P> cross(P a, P b){
  vector<P> res;
  if(abs(abs(b-a)-2.0)<EPS){
    P c = a + b;
    res.push_back( P(c.real()/2, c.imag()/2) );
  }else if(abs(b-a)<2.0){
    P ab = b - a;
    P center = a + P(ab.real()/2,ab.imag()/2);
    P un1 = (ab * P(0, +1)) / abs(ab);
    P un2 = (ab * P(0, -1)) / abs(ab);
    double dist = sqrt(1 - pow(abs(ab) /2, 2));
    P c1 = center + un1 * dist;
    P c2 = center + un2 * dist;
    res.push_back(c1);
    res.push_back(c2);
  }
  return res;
}

int solve(){
  int ans=1;
  for(int i=0;i<n;i++){
    for(int j=0;j<n;j++){
      vector<P> c=cross(p[i], p[j]);
      if(c.empty()) continue;
      int cnt1=2, cnt2=2;
      for(int k=0;k<n;k++){
	if(i==k || j==k) continue;
	if(abs(c[0]-p[k])-1.0<EPS) cnt1++;
	if(c.size()==2 && abs(c[1]-p[k])-1.0<EPS) cnt2++;
      }
      ans=max(ans, max(cnt1, cnt2));
    }
  }
  return ans;
}
main(){
  while(1){
    cin >> n;
    if(n==0) break;
    for(int i=0;i<n;i++){
      double x, y;
      cin >> x;
      getchar();
      cin >> y;
      p[i] = P(x, y);
    }
    cout << solve() << endl;
  }
  return 0;
}