#include // std::string #include // std::cout #include using namespace std; int n; int m; int a[501][501]; int n_up(int i, int j) { if (i-1<0) return 0; return a[i-1][j]; } int n_down(int i, int j) { if (i+1>=n) return 0; return a[i+1][j]; } int n_left(int i, int j) { if (j-1<0) return 0; return a[i][j-1]; } int n_right(int i, int j) { if (j+1>=m) return 0; return a[i][j+1]; } void TryRemove(int i, int j) { if (a[i][j] == 0) return; // if it has at least 3 bad neighbours, remove it int good_neighbours = n_up(i,j) + n_down(i,j) + n_left(i,j) + n_right(i,j); if (good_neighbours <= 1) { a[i][j]=0; if (n_up(i,j)) TryRemove(i-1,j); if (n_down(i,j)) TryRemove(i+1, j); if (n_left(i,j)) TryRemove(i, j-1); if (n_right(i,j)) TryRemove(i, j+1); } } int main() { // read input string tmp; getline(cin, tmp); stringstream ss(tmp); ss >> n; ss >> m; for(int i=0; i