1
#include <cstdio>
#include <algorithm>
using namespace std;
int xiang[2500],k1=1;
int cha[55][55][4];
int k=1;
int map[55][55];
void zhaofang(int z,int y);
struct aaa{int hx;int hy;char wei;int mianji;};
aaa x1;
int main()
{
freopen("castle.in","r",stdin);
freopen("castle.out","w",stdout);
int m,n;
cin>>m>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
int a;
cin>>a;
for(int k=0;k<4;k++){
cha[i][j][k]=a%2;
a/=2;
}
}
}
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
if(map[i][j]==0){
zhaofang(i,j);
xiang[k++]=k1;
k1=1;
}
}
k--;
cout<<k<<endl;
int max1=0;
for(int i=1;i<=k;i++)
max1=max(max1,xiang[i]);
cout<<max1<<endl;
aaa x1;
x1.mianji=0;
for(int j=1;j<=m;j++)
for(int i=n;i>=1;i--){
if(cha[i][j][1]==1)
{
if(map[i][j]!=map[i-1][j])
{if(xiang[map[i][j]]+xiang[map[i-1][j]]>x1.mianji){
x1.hx=i;
x1.hy=j;
x1.wei='N';
x1.mianji=xiang[map[i][j]]+xiang[map[i-1][j]];
}
else if(xiang[map[i][j]]+xiang[map[i-1][j]]==x1.mianji)
{
if(x1.wei=='E')
{
if(j<=x1.hy){x1.hx=i;
x1.hy=j;
x1.wei='N';
x1.mianji=xiang[map[i][j]]+xiang[map[i-1][j]];}
}
}
}
}
if(cha[i][j][2]==1&&map[i][j]!=map[i][j+1])
if(xiang[map[i][j]]+xiang[map[i][j+1]]>x1.mianji)
{
x1.hx=i;
x1.hy=j;
x1.wei='E';
x1.mianji=xiang[map[i][j]]+xiang[map[i][j+1]];
}
}
cout<<x1.hx<<" "<<x1.hy<<" "<<x1.wei<<endl;
return 0;
}
void zhaofang(int z,int y)
{
map[z][y]=k;
for(int i=0;i<=3;i++)
{
if(cha[z][y][i]==0){
if(i==0&&map[z][y-1]==0){k1++;zhaofang(z,y-1);}
else if(i==1&&map[z-1][y]==0){k1++;zhaofang(z-1,y);}
else if(i==2&&map[z][y+1]==0){k1++;zhaofang(z,y+1);}
else if(i==3&&map[z+1][y]==0){k1++;zhaofang(z+1,y);}
}
}
}
2
#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
int mp[55][55];
int room[2555];
int roomnum[55][55];
int sum, size, m, n;
bool v[55][55];
void dfs(int i, int j)
{
v[i][j] = true;
roomnum[i][j] = sum;
size++;
if((mp[i][j] & 1) == 0 && j > 1 && !v[i][j - 1]) dfs(i, j - 1);
if((mp[i][j] & 2) == 0 && i > 1 && !v[i - 1][j]) dfs(i - 1, j);
if((mp[i][j] & 4) == 0 && j < m && !v[i][j + 1]) dfs(i, j + 1);
if((mp[i][j] & 8) == 0 && i < n && !v[i + 1][j]) dfs(i + 1, j);
}
int main()
{
freopen("castle.in","r",stdin);
freopen("castle.out","w",stdout);
int i, j;
scanf("%d%d", &m, &n);
for(i = 1; i <= n; i++)
{
for(j = 1; j <= m; j++)
{
scanf("%d", &mp[i][j]);
}
}
sum = 0;
for(i = 1; i <= n; i++)
{
for(j = 1; j <= m; j++)
{
if(!v[i][j])
{
size = 0;
dfs(i, j);
room[sum++] = size;
}
}
}
int mx = -1;
for(i = 0; i < sum; i++)
{
mx=max(mx,room[i]);
}
printf("%d\n%d\n", sum, mx);
mx = -1;
char c;
int r, l;
for(j = 1; j <= m; j++)
{
for(i = n; i >= 1; i--)
{
if((mp[i][j] & 2) != 0 && i > 1)
{
if(roomnum[i][j] != roomnum[i - 1][j])
{
int tmp = room[roomnum[i][j]] + room[roomnum[i - 1][j]];
if(tmp > mx)
{
r = i;
l = j;
c = 'N';
mx = tmp;
}
}
}
if((mp[i][j] & 4) != 0 && j < m)
{
if(roomnum[i][j] != roomnum[i][j + 1])
{
int tmp = room[roomnum[i][j]] + room[roomnum[i][j + 1]];
if(tmp > mx)
{
r = i;
l = j;
c = 'E';
mx = tmp;
}
}
}
}
}
printf("%d\n%d %d %c\n", mx, r, l, c);
return 0;
}