#include <cstdio>
#include <iostream>
#include <fstream>
#include <vector>
#include <list>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <bitset>
#include <algorithm>
#include <sstream>
#include <iomanip>
#include <cmath>
#include <cstdlib>
#include <ctype.h>
#include <cstring>
#include <string>
#include <ctime>
#include <cassert>
#include <utility>

#define LIM 405

using namespace std;

int ty, n, m, currS;
pair<int, char> mat[LIM][LIM]; // id componenta conexa din care face parte
int v[LIM * LIM];
char c[LIM][LIM];
bool viz[LIM][LIM];
int d[4][2] = {{-1, 0}, {0, +1}, {+1, 0}, {0, -1}};

void dfs(int ins, int jns, int id) {
    viz[ins][jns] = true;
    mat[ins][jns] = make_pair(id, c[ins][jns]);
    currS++;
    for(int i = 0; i < 4; i++) {
        int ni = ins + d[i][0];
        int nj = jns + d[i][1];
        if(ni >= 0 && ni < n && nj >= 0 && nj < m && !viz[ni][nj] && c[ins][jns] == c[ni][nj]) {
            dfs(ni, nj, id);
        }
    }
}

void responseTo2() {
    int mx = -1;
    int idChangei = -1, idChangej = -1;
    char chChange = ' ';
    for(int i = 0; i < n; i++) {
        for(int j = 0; j < m; j++) {
            for(int v1 = 0; v1 < 4; v1++) {
                for(int v2 = 0; v2 < 4; v2++) {
                    if(v1 != v2) {
                        int ni1 = i + d[v1][0];
                        int nj1 = j + d[v1][1];
                        int ni2 = i + d[v2][0];
                        int nj2 = j + d[v2][1];
                        if(ni1 >= 0 && ni1 < n && ni2 >= 0 && ni2 < n && nj1 >= 0 && nj1 < m && nj2 >= 0 && nj2 < m) {
                            int idCompConex1 = mat[ni1][nj1].first;
                            int idCompConex2 = mat[ni2][nj2].first;
                            char chCompConex1 = mat[ni1][nj1].second;
                            char chCompConex2 = mat[ni2][nj2].second;
                            int sum_between = v[idCompConex1] + v[idCompConex2] + 1;
                            if(idCompConex1 != idCompConex2 && chCompConex1 == chCompConex2 && mx < sum_between) {
                                idChangei = i;
                                idChangej = j;
                                chChange = chCompConex1;
                                mx = sum_between;
                           }
                           else {
                                int s1 = v[idCompConex1] + 1;
                                int s2 = v[idCompConex2] + 1;
                                bool c1 = (mx < s1) ? true : false;
                                bool c2 = (mx < s2) ? true : false;
                                if(c1 || c2) {
                                    idChangei = i;
                                    idChangej = j;
                                    if(s1 == s2) {
                                        chChange = min(chCompConex1, chCompConex2);
                                        mx = s1;
                                        continue;
                                    }
                                    if (c1) {
                                        chChange = chCompConex1;
                                        mx = s1;
                                    }
                                    else {
                                        chChange = chCompConex2;
                                        mx = s2;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    printf("%d %d\n", idChangei + 1, idChangej + 1);
    printf("%c\n", chChange);
}

int main() {
//	freopen("date.in", "r", stdin);
//	freopen("date.out","w", stdout);

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

    int mx = -1;
    int idCC = 1;
    for(int i = 0; i < n; i++) {
        for(int j = 0; j < m; j++) {
            if(!viz[i][j]) {
                currS = 0;
                dfs(i, j, idCC);
                v[idCC] = currS;
                idCC++;
                mx = max(mx, currS);
            }
        }
    }

//    for(int i = 0; i < n; i++) {
//        for(int j = 0; j < m; j++) {
//            cout << mat[i][j].first << " "; // << mat[i][j].second
//        }
//        cout << endl;
//    }

    if(ty == 1) {
        printf("%d\n", mx);
    } else {
        responseTo2();
    }

    return 0;
}