#include <bits/stdc++.h>
#define MAX_N 100
using namespace std;
const int rad = 1;
struct circle {
    double x, y;
    int cost;
};
typedef struct circle P;

double dist(P a, P b) { //2点間距離
    double diffx=b.x-a.x, diffy=b.y-a.y;
    return(sqrt(diffx*diffx+diffy*diffy));
}

bool judge(P a, P b) { //重なり判定
    return(2*rad >= dist(a, b));
}

int main(void) {
    int n; cin >> n; //枚数
    P data[n]; //座標及びコストデータ
    int _max = INT_MIN; //重なり枚数の最大値
    for(int r = 0; r < n; r++) {
        scanf("%lf,%lf", &data[r].x, &data[r].y); data[r].cost = 1;
        for(int c = 0; c < r; c++) {
            if(judge(data[r], data[c])) { //もし重なっていたら
                //記録
                //printf("%d and %d update...\n", r+1, c+1);
                _max = max(_max, ++data[r].cost);
                _max = max(_max, ++data[c].cost);
            }
        }
    }
    cout << _max << endl;
    
    return(0);
}