#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}};

struct El {
    int sum_CC, i, j;
    char ch;

    El() {
        sum_CC = 0;
        i = -1;
        j = -1;
        ch = ' ';
    }

    El(int s, int a, int b, char c) {
        sum_CC = s;
        i = a;
        j = b;
        ch = c;
    }
};

struct cmpStruct {
  bool operator() (El const &lhs, El const &rhs) const {
    //return lhs > rhs; // inverse
    if(lhs.sum_CC > rhs.sum_CC) {
        return 1;
    }
    else if(lhs.sum_CC < rhs.sum_CC) {
        return 0;
    }
    else {
        if(lhs.i < rhs.i) {
            return 1;
        }
        else if(lhs.i > rhs.i) {
            return 0;
        }
        else {
            if(lhs.j < rhs.j) {
                return 1;
            }
            else if(lhs.j > rhs.j) {
                return 0;
            }
            else {
                if(lhs.ch < rhs.ch) {
                    return 1;
                }
                else if(lhs.ch > rhs.ch) {
                    return 0;
                }
                else {
                    return -1;
                }
            }
        }
    }
  }
};

set<El, cmpStruct > s;

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;
                            //cout << sum_between << "\n";
                            if(idCompConex1 != idCompConex2 && chCompConex1 == chCompConex2) {
                                //cout << sum_between << "\n";
                                s.insert(El(sum_between, i, j, chCompConex1));
                            }
                            else {
                                int s1 = v[idCompConex1] + 1;
                                int s2 = v[idCompConex2] + 1;
                                //cout << s1 << " .... s2 " << s2 << "\n";
                                s.insert(El(s1, i, j, chCompConex1));
                                s.insert(El(s2, i, j, chCompConex2));
                            }
                        }
                    }
                }
            }
        }
    }
    El fr = *s.begin();
    printf("%d %d\n", fr.i + 1, fr.j + 1);
    printf("%c\n", fr.ch);
}

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;
}