#include char field[64][64]; int h, w; int dr[4] = {1, 0, -1, 0}; int dc[4] = {0, 1, 0, -1}; bool outOfRange(int r, int c) { if( not ( 0 <= r and r < h and 0 <= c and c < w ) ) return true; return false; } int main() { scanf("%d %d", &h, &w); for(int i = 0; i < h; ++i) { scanf("%s", field[i]); } int res = 0; bool updated = false; do { updated = false; for(int r = 0; r < h; ++r) { for(int c = 0; c < w; ++c) { if( field[r][c] == '.' ) continue; int count = 0; int kk = -1; for(int k = 0; k < 4; ++k) { int nr = r + dr[k], nc = c + dc[k]; if( outOfRange(nr, nc) ) continue; if( field[nr][nc] == '.' ) continue; count += 1; kk = k; } if( count == 1 ) { field[r][c] = field[r+dr[kk]][c+dc[kk]] = '.'; res += 100; updated = true; } } } if( not updated ) { for(int r = 0; r < h; ++r) { for(int c = 0; c < w; ++c) { if( field[r][c] == '.' ) continue; int count = 0; int kk = -1; for(int k = 0; k < 4; ++k) { int nr = r + dr[k], nc = c + dc[k]; if( outOfRange(nr, nc) ) continue; if( field[nr][nc] == '.' ) continue; count += 1; kk = k; } if( count == 2 ) { field[r][c] = field[r+dr[kk]][c+dc[kk]] = '.'; res += 100; updated = true; goto label_1; } } } label_1:; } } while( updated ); int w_count = 0, b_count = 0; for(int r = 0; r < h; ++r) { for(int c = 0; c < w; ++c) { switch( field[r][c] ) { case 'w' : w_count += 1; break; case 'b' : b_count += 1; break; } } } res += 10 * std::min(w_count, b_count) + std::abs(w_count - b_count); printf("%d\n", res); return 0; }