#include <cstdio>

int type;
int m, n;
char crops[500][500];
char field[500][500];
int zone_size[50];
int zones = 1;
int max_zone = 0;

int di[5] = {-1, 0, 1, 0}, dj[5] = {0, 1, 0, -1};
int vi, vj;

void mark_zone(int i, int j, char c) {
    crops[i][j] = crops[i][j] - 'a' + 'A';
    zone_size[zones]++;
    field[i][j] = zones;
    for (int k=0; k<4; ++k) {
        vi = i + di[k];
        vj = j + dj[k];
        if (crops[vi][vj] == c)
            mark_zone(vi, vj, c);
    }
}

void largest() {
    for (int i=1; i<m; ++i)
        for (int j=1; j<n; ++j)
            if (crops[i][j] >= 'a') {
                mark_zone(i,j, crops[i][j]);
                if (zone_size[zones] > max_zone)
                    max_zone = zone_size[zones];
                zones++;
            }
}

int new_size(int i, int j) {
    int s1 = 1;
    int s2 = 1;
    if (crops[i][j-1] == crops[i][j+1])
        s1 += zone_size[field[i][j-1]] + zone_size[field[i][j+1]]
    if (crops[i-1][j] == crops[i+1][j])
        s1 += zone_size[field[i-1][j]] + zone_size[field[i+1][j]]
    return 0;

}

void enlarge() {
    largest();
    int s;
    for (int i=0; i<m; ++i)
        for (int j=0; j<n; ++j) {
            s = new_size(i, j);
            if (s > max_zone)
                max_zone = s;
        }
}

int main () {

    scanf("%d\n", &type);
    scanf("%d %d", &m, &n);

    for (int i=1; i<=m; ++i) {
        scanf("\n");
        for (int j=1; j<=n; ++j)
            scanf("%c", &crops[i][j]);
    }


    if (type == 1) {
        largest();
        printf("%d", max_zone);
    } else
        enlarge();

    return 0;
}