{
ID:anniel11
PROG:castle
LANG:PASCAL
}
var
a:array[0..50,0..50 ,1..4] of boolean;
component:array[0..50,0..50] of integer;//which room does it belong to
room_size:array[0..2500] of integer;
neighbour:array[0..2500,0..2500] of boolean;
m,n,i,j,temp,cmp_num,max_size,r_size,r_i,r_j,r_direction:integer;
procedure process(x,y,k:integer);
begin
if (k and 1)<>1 then a[x,y,1]:=true;//W left
if (k and 2)<>2 then a[x,y,2]:=true;//N up
if (k and 4)<>4 then a[x,y,3]:=true;//E right
if (k and 8)<>8 then a[x,y,4]:=true;//S down
end;
procedure floodfill(k,i,j:integer);
begin
if (a[i,j,3])and(component[i,j+1]=0) then
begin
component[i,j+1]:=k;
inc(room_size[k]);
if room_size[k]>max_size then max_size:=room_size[k];
floodfill(k,i,j+1);
end;
if (a[i,j,4])and(component[i+1,j]=0) then
begin
component[i+1,j]:=k;
inc(room_size[k]);
if room_size[k]>max_size then max_size:=room_size[k];
floodfill(k,i+1,j);
end;
if (a[i,j,2])and(component[i-1,j]=0) then
begin
component[i-1,j]:=k;
inc(room_size[k]);
if room_size[k]>max_size then max_size:=room_size[k];
floodfill(k,i-1,j);
end;
if (a[i,j,1])and(component[i,j-1]=0) then
begin
component[i,j-1]:=k;
inc(room_size[k]);
if room_size[k]>max_size then max_size:=room_size[k];
floodfill(k,i,j-1);
end;
end;
begin
assign(input,'castle.in');
reset(input);
assign(output,'castle.out');
rewrite(output);
readln(m,n);
fillchar(a,sizeof(a),false);//true=reachable
fillchar(component,sizeof(component),0);
fillchar(neighbour,sizeof(neighbour),false);
for i:=1 to n do
begin
for j:=1 to m do
begin
read(temp);
process(i,j,temp);
end;
readln;
end;
for i:=1 to n do
for j:=1 to m do
if component[i,j]=0 then
begin
inc(cmp_num);
component[i,j]:=cmp_num;
inc(room_size[cmp_num]);
if room_size[cmp_num]>max_size then max_size:=room_size[cmp_num];
floodfill(cmp_num,i,j);
end;
for j:=1 to m do
for i:=n downto 1 do
begin
if i<>1 then if component[i,j]<>component[i-1,j] then
if room_size[component[i,j]]+room_size[component[i-1,j]]>r_size then
begin
r_size:=room_size[component[i,j]]+room_size[component[i-1,j]];
r_i:=i;
r_j:=j;
r_direction:=1; //up
end;
if j<>m then if component[i,j]<>component[i,j+1] then
if room_size[component[i,j]]+room_size[component[i,j+1]]>r_size then
begin
r_size:=room_size[component[i,j]]+room_size[component[i,j+1]];
r_i:=i;
r_j:=j;
r_direction:=2; //right
end;
end;
for i:=1 to n do
begin
for j:=1 to m do write(component[i,j],' ');
writeln;
end;
writeln(cmp_num);
writeln(max_size);
writeln(r_size);
write(r_i,' ',r_j,' ');
if r_direction=1 then writeln('N') else writeln('E');
close(input);
close(output);
end.