#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define REP(i,a,n) for(int i=(a); i<(int)(n); i++) #define rep(i,n) REP(i,0,n) #define FOR(it,c) for(__typeof((c).begin()) it=(c).begin(); it!=(c).end(); ++it) #define ALLOF(c) (c).begin(), (c).end() typedef long long ll; int N, M; string field[55]; #define MAX_V 2505 int V; vector G[MAX_V]; int match[MAX_V]; bool used[MAX_V]; void init_graph(){ for(int i=0; i, int> b_memo, w_memo; map > b_number, w_number; init_graph(); cin >> N >> M; rep(i,N){ cin >> field[i]; rep(j,M){ if(field[i][j] == 'b'){ b_number[b_cnt] = make_pair(i,j); b_memo[make_pair(i,j)] = b_cnt++; } if(field[i][j] == 'w'){ w_number[w_cnt] = make_pair(i,j); w_memo[make_pair(i,j)] = w_cnt++; } } } V = b_cnt + w_cnt; rep(i,N){ rep(j,M){ if(field[i][j] == 'b'){ rep(k,4){ int nx = j + vx[k]; int ny = i + vy[k]; if(0<=nx && nx=0){ pair p = w_number[match[i]-b_cnt]; pair q = b_number[i]; field[p.first][p.second] = 'x'; field[q.first][q.second] = 'x'; } if(i>=b_cnt && match[i]>=0){ pair p = b_number[match[i]]; pair q = w_number[i-b_cnt]; field[p.first][p.second] = 'x'; field[q.first][q.second] = 'x'; } } int bb = 0; int ww = 0; rep(i,N){ rep(j,M){ if(field[i][j] == 'w') ww++; if(field[i][j] == 'b') bb++; } } int mn = min(bb,ww); ret += mn * 10; bb-=mn; ww-=mn; ret += bb + ww; cout << ret << endl; return 0; }