#include <cstdio>
#include <complex>
#include <vector>

using namespace std;
typedef complex<double> P;
int main(){
  int n;
  P p1(0.0,1.0),p2(0.0,-1.0);
  while(scanf("%d",&n)&&n){
    P p[n];
    double x,y;
    for(int i=0;i<n;++i){
      scanf("%lf,%lf",&x,&y);
      p[i].real()=x;p[i].imag()=y;
    }
    int a=1;
    for(int i=0;i<n;++i){
      for(int j=i+1;j<n;++j){
	vector<P> v;
	P c((p[i].real()+p[j].real())/2,(p[i].imag()+p[j].imag())/2);
	if(abs(p[i]-p[j])==2.0)  v.push_back(c);
	else if(abs(p[i]-p[j])<2.0){
	  P va=p[i]-p[j];
	  P x1=(va*p1)/abs(va);
	  P x2=(va*p2)/abs(va);
	  double l=sqrt(1-abs(va)*abs(va)/4);
	  P c1=c+x1*l;
	  P c2=c+x2*l;
	  v.push_back(c1);v.push_back(c2);
	}
	if(v.empty()) continue;
	int m1=2;
	int m2=2;
	for(int k=0;k<n;++k){
	  if(i!=k&&j!=k&&abs(v[0]-p[k])<=1.0) m1++;
	  if(i!=k&&j!=k&&abs(v[1]-p[k])<=1.0) m2++;
	  a=max(a,max(m1,m2));
	}
      }
    }
    printf("%d\n",a);
  }
  return 0;
}