#include #include using namespace std; const int L = 50; int m, n; struct Grid { bool u; bool d; bool l; bool r; bool v; void set(int i) { this->l = (i & 1) != 0; this->u = (i & 2) != 0; this->r = (i & 4) != 0; this->d = (i & 8) != 0; this->v = false; } }; Grid map[L][L]; int dfs(int x, int y) { int cnt = 1; map[x][y].v = true; if (!map[x][y].l && !map[x][y - 1].v) cnt += dfs(x, y - 1); if (!map[x][y].r && !map[x][y + 1].v) cnt += dfs(x, y + 1); if (!map[x][y].u && !map[x - 1][y].v) cnt += dfs(x - 1, y); if (!map[x][y].d && !map[x + 1][y].v) cnt += dfs(x + 1, y); return cnt; } int main() { scanf("%d %d", &m, &n); for (int i = 0, g; i < m; i++) { for (int j = 0; j < n; j++) { scanf("%d", &g); map[i][j].set(g); } } int num = 0, size = 0; for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { if (map[i][j].v) continue; num++; size = max(size, dfs(i, j)); } } printf("%d\n%d\n", num, size); return 0; }