#include<iostream> #include<algorithm> #include<cstring> #include<queue> using namespace std ; const int N = 1010 ; int d[8][2] = {{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1},{-1,0}} ; char g[N][N] ; int n , m ; int v[N][N] ; struct edge{ int x , y ; edge(int xx, int yy){ x = xx , y = yy ; } }; queue<edge> q ; void bfs(int a , int b ){ q.push(edge(a,b)) ; v[a][b] = 1 ; while(!q.empty()){ edge now = q.front() ; q.pop() ; int x = now.x, y = now.y; for(int i = 0 ; i < 8 ; i ++){ int tx = x + d[i][0] , ty = y + d[i][1] ; if(tx >= 0 && tx < n && ty >= 0 && ty < m ){ if(g[tx][ty] == 'W'&&!v[tx][ty]){ q.push(edge(tx,ty)) ; v[tx][ty] = 1 ; } } } } } int main(){ cin >> n >> m ; for(int i = 0 ; i < n ;i ++) cin >> g[i] ; int ans = 0 ; for(int i = 0 ; i < n ;i ++){ for(int j= 0 ; j < m ; j ++){ if(!v[i][j] && g[i][j] == 'W'){ ans ++ ; bfs(i,j) ; } } } cout << ans << endl ; }