#include #include int n, m; char c[500][501]; int seen[500][500]; void Init(); int GetNeighbours(int, int); void Zero(int, int); int Check(int, int); int Walk(int, int, int, int, int); int main() { char temp[2]; int i, j, l; scanf("%d%d", &n, &m); gets(temp); for (i=0;i= 0) if (c[a-1][b] == '1') l++; if (a + 1 < n) if (c[a+1][b] == '1') l++; if (b - 1 >= 0) if (c[a][b-1] == '1') l++; if (b + 1 < m) if (c[a][b+1] == '1') l++; return l; } void Zero(int a, int b) { int l; c[a][b] = '0'; if (a - 1 >= 0) if (c[a-1][b] == '1') { l = GetNeighbours(a-1,b); if (l == 0) c[a-1][b] = '0'; if (l == 1) Zero(a-1,b); } if (a + 1 < n) if (c[a+1][b] == '1') { l = GetNeighbours(a+1,b); if (l == 0) c[a+1][b] = '0'; if (l == 1) Zero(a+1, b); } if (b - 1 >= 0) if (c[a][b-1] == '1') { l = GetNeighbours(a,b-1); if (l == 0) c[a][b-1] = '0'; if (l == 1) Zero(a, b-1); } if (b + 1 < m) if (c[a][b+1] == '1') { l = GetNeighbours(a,b+1); if (l == 0) c[a][b+1] = '0'; if (l == 1) Zero(a, b+1); } } int Check(int a, int b) { int l = 0; Init(); seen[a][b] = 1; if (a - 1 >= 0) if (c[a-1][b] >= '1') { l = Walk(a, b, a-1, b, 1); if (l == 1) { c[a][b] = '2'; return 1; } } if (a + 1 < n) if (c[a+1][b] >= '1') { l = Walk(a, b, a+1, b, 1); if (l == 1) { c[a][b] = '2'; return 1; } } if (b - 1 >= 0) if (c[a][b-1] >= '1') { l = Walk(a, b, a, b-1, 1); if (l == 1) { c[a][b] = '2'; return 1; } } if (b + 1 < m) if (c[a][b+1] >= '1') { l = Walk(a, b, a, b+1, 1); if (l == 1) { c[a][b] = '2'; return 1; } } return 0; } int Walk(int x, int y, int a, int b, int l) { int l2; seen[a][b] = 1; if (a - 1 >= 0) if ((a-1 == x) && (b == y) && (l > 2)) { c[a][b] = '2'; return 1; } if (a + 1 < n) if ((a+1 == x) && (b == y) && (l > 2)) { c[a][b] = '2'; return 1; } if (b - 1 >= 0) if ((a == x) && (b-1 == y) && (l > 2)) { c[a][b] = '2'; return 1; } if (b + 1 < m) if ((a == x) && (b+1 == y) && (l > 2)) { c[a][b] = '2'; return 1; } if (a - 1 >= 0) if ((c[a-1][b] >= '1') && (seen[a-1][b] == 0)) { l2 = Walk(x, y, a-1, b, l+1); if (l2 == 1) { c[a][b] = '2'; return 1; } } if (a + 1 < n) if ((c[a+1][b] >= '1') && (seen[a+1][b] == 0)) { l2 = Walk(x, y, a+1, b, l+1); if (l2 == 1) { c[a][b] = '2'; return 1; } } if (b - 1 >= 0) if ((c[a][b-1] >= '1') && (seen[a][b-1] == 0)) { l2 = Walk(x, y, a, b-1, l+1); if (l2 == 1) { c[a][b] = '2'; return 1; } } if (b + 1 < m) if ((c[a][b+1] >= '1') && (seen[a][b+1] == 0)) { l2 = Walk(x, y, a, b+1, l+1); if (l2 == 1) { c[a][b] = '2'; return 1; } } return 0; }