var v:array[0..400,0..400] of char;
        tip,max,i,n,m,j:integer; a:char;



 procedure brodare;
 var i,j:integer;
 begin

  for i:=0 to m+1 do
        begin
         v[i,0]:='0';
         v[i,n+1]:='0';
        end;

  for j:=0 to n+1 do
        begin
         v[0,j]:='0';
         v[m+1,j]:='0';
        end;
 end;



 function nothing (x,y:integer; c:char):boolean;
 begin

  if ((v[x+1,y]<>c) and (v[x-1,y]<>c) and (v[x,y+1]<>c) and (v[x,y-1]<>c))
  then nothing:=true else nothing:=false;
 end;



 procedure citire;
 var i,j:integer; f:text;
 begin

  readln(tip);

  readln(m,n);

  for i:=1 to m do
        begin
         for j:=1 to n do
                read(v[i,j]);
         readln;
        end;

 end;



{ procedure afisare;
 var i,j:integer;
 begin

  for i:=1 to m do
        begin
         for j:=1 to n do
                write(v[i,j]:3);
         writeln;
        end;
 end;             }



 function valid (x,y:integer):boolean;
 begin

  if (x in [1..m]) and (y in [1..n]) then valid:=true else valid:=false;
 end;



 procedure bak (x,y,nr:integer; c:char);
 var l:char;
 begin

  if v[x,y]=c then begin
        l:=v[x,y];
        v[x,y]:=upcase(v[x,y]);
        if nothing(x,y,l) then begin
        if nr>max then begin max:=nr; a:=v[x,y]; end;
        end
        else begin
        if valid(x+1,y) then bak(x+1,y,nr+1,c);
        if valid(x-1,y) then bak(x-1,y,nr+1,c);
        if valid(x,y+1) then bak(x,y+1,nr+1,c);
        if valid(x,y-1) then bak(x,y-1,nr+1,c);
        end;
        v[x,y]:=l;
        end;

 end;



begin
 citire; max:=0;

 brodare;

 for i:=1 to m do
        begin
         for j:=1 to n do
                if not(v[i,j] in ['A'..'Z']) then bak(i,j,1,v[i,j]);
        end;

 writeln(max,'',a);
end.