#include<iostream> #include<algorithm> #include<cstring> #include<queue> using namespace std ; const int N = 55 ; int g[N][N][N] ;//0Î÷ǽ£¬1 ±±Ç½ 2 ¶«Ç½ 3 ÄÏǽ int d[4][2] = {{0,-1},{-1,0},{0,1},{1,0}} ; int a[5] = {1,2,4,8} ; int n , m ; int v[N][N] ; int ans , res ; struct node{ int x , y ; node(int xx , int yy){ x = xx ; y = yy ; } }; queue<node> q ; void bfs(int a , int b){ q.push(node(a,b)) ; int maxn = 0 ; while(!q.empty()){ maxn ++ ; res = max(maxn,res) ; node now = q.front() ; q.pop() ; int x = now.x , y = now.y ; v[x][y] = 1 ; for(int i = 0 ; i < 4 ; i ++){ if(g[x][y][i]) continue ; int tx = x + d[i][0] , ty = y + d[i][1] ; if(tx<0||tx>=n||ty<0||ty>=m||v[tx][ty]) continue ; v[tx][ty] = 1 ; q.push(node(tx,ty)) ; } } } int main(){ cin >> n >> m ; for(int i = 0 ; i <n ; i ++){ for(int j= 0 ; j < m ; j ++){ int p ; cin >> p ; int x = 3 ; while(p){ if(p - a[x] >= 0 ){ p-=a[x] ; g[i][j][x] = 1 ; x -- ; }else { x -- ; } } } } for(int i = 0 ; i < n ;i ++){ for(int j = 0 ; j < m ; j ++){ if(!v[i][j]){ ans ++ ; bfs(i,j) ; } } } cout << ans << endl << res << endl ; }