#include using namespace std; #define int long long typedef vectorvint; typedef pairpint; typedef vectorvpint; #define rep(i,n) for(int i=0;i<(n);i++) #define reps(i,f,n) for(int i=(f);i<(n);i++) #define all(v) (v).begin(),(v).end() #define each(it,v) for(__typeof((v).begin()) it=(v).begin();it!=(v).end();it++) #define pb push_back #define fi first #define se second templateinline void chmin(A &a,B b){if(a>b)a=b;} templateinline void chmax(A &a,B b){if(a G[MAX_V]; int match[MAX_V]; int used[MAX_V]; void add_edge(int u, int v) { G[u].push_back(v); G[v].push_back(u); } bool dfs(int v) { used[v] = true; for (int i = 0; i < G[v].size(); i ++) { int u = G[v][i], w = match[u]; if (w < 0 || ! used[w] && dfs(w)) { match[v] = u; match[u] = v; return true; } } return false; } int bipartite_matching() { int res = 0; memset(match, -1, sizeof(match)); for (int v = 0; v < V; v ++) { if (match[v] < 0) { memset(used, 0, sizeof(used)); if (dfs(v)) res ++; } } return res; } int H,W; char fld[55][55]; signed main(){ cin>>H>>W; rep(i,H)cin>>fld[i]; V=2500; int cntW=0,cntB=0; rep(i,H)rep(j,W){ if(fld[i][j]=='.')continue; if(fld[i][j]=='b')cntB++; else cntW++; if(i+1