#include<bits/stdc++.h> #include<ext/pb_ds/assoc_container.hpp> #include<ext/pb_ds/hash_policy.hpp> #define Add(x, y) (x + y >= mod) ? (x + y - mod) : (x + y) #define lowbit(x) x & (-x) #define pi pair<ll, ll> #define pii pair<ll, pair<ll, ll>> #define iip pair<pair<ll, ll>, ll> #define ppii pair<pair<ll, ll>, pair<ll, ll>> #define ls(k) k << 1 #define rs(k) k << 1 | 1 #define fi first #define se second #define full(l, r, x) for(auto it = l; it != r; ++it) (*it) = x #define Full(a) memset(a, 0, sizeof(a)) #define open(s1, s2) freopen(s1, "r", stdin), freopen(s2, "w", stdout); #define For(i, l, r) for(register int i = l; i <= r; ++i) #define _For(i, l, r) for(register int i = r; i >= l; --i) using namespace std; using namespace __gnu_pbds; typedef double db; typedef unsigned long long ull; typedef long long ll; bool Begin; const int N = 51, M = N * N; inline ll read(){ ll x = 0, f = 1; char c = getchar(); while(c < '0' || c > '9'){ if(c == '-') f = -1; c = getchar(); } while(c >= '0' && c <= '9'){ x = (x << 1) + (x << 3) + (c ^ 48); c = getchar(); } return x * f; } inline void write(ll x){ if(x < 0){ putchar('-'); x = -x; } if(x > 9) write(x / 10); putchar(x % 10 + '0'); } int n, m, s1, s2, ans; int id[N][N]; int a[M]; bool f[M]; char s[N][N]; int dx[] = {0, 0, 1, - 1}, dy[] = {1, -1, 0, 0}; vector<int> E[M]; inline void add(int u, int v){ E[u].push_back(v); } inline bool dfs(int u){ for(auto v : E[u]){ if(f[v]) continue; f[v] = 1; if(!a[v] || dfs(a[v])){ a[v] = u; return 1; } } return 0; } inline void Match(){ for(int i = 1; i <= n * m; ++i){ for(int j = 1; j <= n * m; ++j) f[j] = 0; if(dfs(i)) ans++; } } bool End; int main(){ n = read(), m = read(); for(int i = 1; i <= n; ++i){ scanf("%s", s[i] + 1); for(int j = 1; j <= m; ++j) id[i][j] = (i - 1) * m + j; } for(int i = 1; i <= n; ++i){ for(int j = 1; j <= m; ++j){ s1 += (s[i][j] == 'w'), s2 += (s[i][j] == 'b'); if(s[i][j] != 'w') continue; for(int k = 0; k < 4; ++k){ int zx = i + dx[k], zy = j + dy[k]; if(zx < 1 || zx > n || zy < 1 || zy > m) continue; if(s[zx][zy] != 'b') continue; add(id[i][j], id[zx][zy]); } } } Match(); s1 -= ans, s2 -= ans; write(ans * 100 + min(s1, s2) * 10 + max(s1, s2) - min(s1, s2)); cerr << '\n' << abs(&Begin - &End) / 1048576 << "MB"; return 0; }