#include using namespace std; typedef long long ll; #define all(x) (x).begin(),(x).end() const int mod=1000000007,MAX=100003,INF=1<<30; vector dx={-1,0,0,1},dy={0,1,-1,0}; struct edge{ int to,cap,rev; }; vector G[MAX]; bool used[MAX]; void add_edge(int from,int to,int cap){ G[from].push_back((edge){to,cap,int(G[to].size())}); G[to].push_back((edge){from,0,int(G[from].size()-1)}); } int DFS(int v,int t,int f){ if(v==t) return f; used[v]=true; for(int i=0;i0){ int d=DFS(e.to,t,min(f,e.cap)); if(d>0){ e.cap-=d; G[e.to][e.rev].cap+=d; return d; } } } return 0; } int max_flow(int s,int t){ int flow=0; for(;;){ memset(used,0,sizeof(used)); int f=DFS(s,t,INF); if(f==0) return flow; flow+=f; } } int main(){ int N,M;cin>>N>>M; int wcnt=0,bcnt=0; vector S(N); for(int i=0;i>s; for(int j=0;j=N) continue; if(j+dy[k]<0) continue; if(j+dy[k]>=M) continue; if(S[i][j]=='w'&&S[i+dx[k]][j+dy[k]]=='b'){ add_edge(i*M+j,(i+dx[k])*M+j+dy[k],1); } } } } int sum=max_flow(99999,100000); cout<