#include <bits/stdc++.h>

using namespace std;

#define MAXN 405

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

int T, N, M;
string A[MAXN];

int P[MAXN * MAXN];
int sz[MAXN * MAXN];

int root(int t) {
	if (P[t] == t) {
		return t;
	}
	return P[t] = root(P[t]);
}

void unite(int a, int b) {
	if (rand() & 1) {
		P[a] = b;
		sz[b] += sz[a];
	}
	else {
		P[b] = a;
		sz[a] += sz[b];
	}
}

set<int> C[26];

int main() {
//	freopen("date.in", "r", stdin);
//	freopen("date.out","w", stdout);
	cin.sync_with_stdio(false);
	srand(time(0));
	
	cin >> T;
	cin >> N >> M;
	for (int i = 0; i < N; i++) {
		cin >> A[i];
	}
	
	for (int i = 0; i < N * M; i++) {
		P[i] = i;
		sz[i] = 1;
	}
	
	for (int i = 0; i < N; i++) {
		for (int j = 0; j < M; j++) {
			for (int d = 0; d < 4; d++) {
				int ni = i + di[d];
				int nj = j + dj[d];
				if (ni >= 0 && ni < N && nj >= 0 && nj < M && A[i][j] == A[ni][nj]) {
					int r1 = root(i * M + j);
					int r2 = root(ni * M + nj);
					if (r1 != r2) {
						unite(r1, r2);
					}
				}
			}
		}
	}
	
	if (T == 1) {
		int ans = 0;
		for (int i = 0; i < N * M; i++) {
			if (P[i] == i) {
				ans = max(ans, sz[i]);
			}
		}
		cout << ans << endl;
	}
	else {
		int ans = 0;
		int pi = -1;
		int pj = -1;
		char cmax = -1;
		for (int i = 0; i < N; i++) {
			for (int j = 0; j < M; j++) {
				for (int k = 0; k < 26; k++) {
					C[k].clear();
				}
				for (int d = 0; d < 4; d++) {
					int ni = i + di[d];
					int nj = j + dj[d];
					if (ni >= 0 && ni < N && nj >= 0 && nj < M && A[i][j] != A[ni][nj]) {
						int id = ni * M + nj;
						int r = root(id);
						int c = A[ni][nj] - 'a';
						C[c].insert(r);
					}
				}
				
				for (int k = 0; k < 26; k++) {
					int sum = 1;
					for (set<int> :: iterator it = C[k].begin(); it != C[k].end(); it++) {
						sum += sz[*it];
					}
					if (sum > 1 && sum > ans) {
						ans = sum;
						pi = i;
						pj = j;
						cmax = 'a' + k;
					}
				}
			}
		}
		cout << pi + 1 << ' ' << pj + 1 << '\n';
		cout << cmax << '\n';
	}
	
	return 0;
}