#include<iostream> using namespace std; int data[51][51]; int vis[51][51]; int roomnum; int maxroom; int m,n; typedef struct node { int x; int y; }node; node queue[1000]; int sum; void bfs(int x, int y) { sum=0; int tail,head; head=tail=0; vis[x][y]=1; node startnode; startnode.x=x; startnode.y=y; queue[tail++]=startnode; sum++; while(head!=tail) { node cur,next; cur=queue[head++]; if(!(data[cur.x][cur.y]&1)&&cur.y-1>=0&&vis[cur.x][cur.y-1]==0) { next.x=cur.x; next.y=cur.y-1; vis[next.x][next.y]=1; queue[tail++]=next; sum++; } if(!(data[cur.x][cur.y]&2)&&cur.x-1>=0&&vis[cur.x-1][cur.y]==0) { next.x=cur.x-1; next.y=cur.y; vis[next.x][next.y]=1; queue[tail++]=next; sum++; } if(!(data[cur.x][cur.y]&4)&&cur.y+1<n&&vis[cur.x][cur.y+1]==0) { next.x=cur.x; next.y=cur.y+1; vis[next.x][next.y]=1; queue[tail++]=next; sum++; } if(!(data[cur.x][cur.y]&8)&&cur.x+1<m&&vis[cur.x+1][cur.y]==0) { next.x=cur.x+1; next.y=cur.y; vis[next.x][next.y]=1; queue[tail++]=next; sum++; } } } int main() { //freopen("input.txt","r",stdin); cin>>m>>n; for(int i=0;i<m;i++) for(int j=0;j<n;j++) cin>>data[i][j]; for(int i=0;i<m;i++) for(int j=0;j<n;j++) vis[i][j]=0; maxroom=0; for(int i=0;i<m;i++) { for(int j=0;j<n;j++) { if(vis[i][j]==0) { bfs(i,j); if(sum>maxroom) maxroom=sum; roomnum++; } } } cout<<roomnum<<endl; cout<<maxroom<<endl; return 0; }