/* coder: ACboy date: 2010-3-16 result: 1A description: UVa 572 Oil Deposits */ #include <iostream> using namespace std; int m, n; int data[256][256]; int vis[256][256]; int dx[] = {1, 0, -1, 0, -1, 1, 1, -1}; int dy[] = {0, 1, 0, -1, 1, -1, 1, -1}; void dfs(int x, int y) { int stack[256][2]; int top = 0; stack[top][0] = x; stack[top][1] = y; top++; while (top != 0) { int tx = stack[top - 1][0]; int ty = stack[top - 1][1]; top--; for (int i = 0; i < 8; ++i) { int newx = tx + dx[i]; int newy = ty + dy[i]; if (newx >= 0 && newx < m && newy >= 0 && newy < n && !vis[newx][newy] && data[newx][newy]) { vis[newx][newy] = 1; stack[top][0] = newx; stack[top][1] = newy; top++; } } } } int main() { #ifndef ONLINE_JUDGE freopen("572.txt", "r", stdin); #endif while (cin >> m >> n) { if (n == m && m == 0) { break; } else { int i, j; char temp; for (i = 0; i < m; ++i) { for (j = 0; j < n; ++j) { cin >> temp; if (temp == '*') { data[i][j] = 0; } else { data[i][j] = 1; } } } memset(vis, 0, sizeof(vis)); int count = 0; for (i = 0; i < m; ++i) { for (j = 0; j < n; ++j) if (!vis[i][j] && data[i][j]) { dfs(i, j); count++; } } cout << count << endl; } } return 0; }