import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.*;

class main {
    public static void main(String[] args) {
        OutputStream outputStream = System.out;
        InputStream inputStream = System.in;
        PrintWriter out = new PrintWriter(outputStream);
        Scanner in = new Scanner(inputStream);
        Pharm Solver = new Pharm();
        Solver.solve(in,out);
        out.close();
    }
}

class Pharm{

    public int n,m,type;
    public String[] a;
    public int[][] zone;
    public int[] zonedim;
    public final int[] dl = {1,-1,0,0};
    public final int[] dc = {0,0,1,-1};
    public int Zone = 0;

    public class pair{
        public int first,second;
        pair(int first,int second){
            this.first = first;
            this.second = second;
        }
    }

    public void BFS(int i,int j){
        ++Zone;
        int N = 1;
        Queue<pair> Q = new ArrayDeque<pair>();
        zone[i][j] = Zone;
        Q.add(new pair(i,j));
        while(!Q.isEmpty()){
            int ii = Q.peek().first;
            int jj = Q.peek().second;
            pair x = Q.remove();
            for(int k = 0; k < 4; k++){
                int ni = ii + dl[k];
                int nj = jj + dc[k];
                if(ni < 0 || nj < 0 || ni >= n || nj >= m) continue;
                if(zone[ni][nj] == 0 && a[ni].charAt(nj) == a[i].charAt(j)) {
                    Q.add(new pair(ni, nj));
                    zone[ni][nj] = Zone;
                    ++N;
                }
            }
        }
        zonedim[Zone] = N;
    }

    public void solve(Scanner in,PrintWriter out){
        type = in.nextInt();
        n = in.nextInt();
        m = in.nextInt();
        a = new String[n+1];
        zone = new int[n+1][m+1];
        zonedim = new int[n*m+1];
        for(int i = 0; i < n; i++) {
            a[i] = in.next();
        }
        for(int i = 0; i < n; i++)
            for(int j = 0; j < m; j++)
                if(zone[i][j] == 0)
                    BFS(i,j);
        if(type == 1){
            int Ans = 0;
            for(int i = 1; i <= Zone; i++)
                Ans = Math.max(Ans,zonedim[i]);
            out.print(Ans);
        }
        else {
            int I = 0, J = 0;
            char A = 'a';
            int Best = 0;
            for (int i = 0; i < n; i++)
                for (int j = 0; j < m; j++)
                    for (char c = 'a'; c <= 'z'; c++) {
                        int Curr = 0;
                        if (c == a[i].charAt(j)) {
                            Curr = zonedim[zone[i][j]];
                        }
                        else {
                            Set<Integer> S = new HashSet<Integer>();
                            for (int k = 0; k < 4; k++) {
                                int ni = i + dl[k];
                                int nj = j + dc[k];
                                if (ni > -1 && nj > -1 && ni < n && nj < m)
                                    if (a[ni].charAt(nj) == c)
                                        S.add(zone[ni][nj]);
                            }
                            for(int it: S)
                                Curr += zonedim[it];
                        }
                        if (Curr > Best) {
                            Best = Curr;
                            I = i + 1;
                            J = j + 1;
                            A = c;
                        }
                    }
            out.printf("%d %d\n%c",I,J,A);
        }
    }
}