#include using namespace std; #define st first #define nd second #define pb push_back #define sz(x) (int)(x).size() #define ll long long ll mod=1000000007; int inf=1000000007; ll infl=1000000000000000007; int a[77][77]; int id[77][77]; int id1[77][77]; int id2[77][77]; setG[15007]; int cap1[3507][3507]; unordered_mapcap[15007]; int o[15007]; bool odw[15007]; int s=1,t; char ans[77][77][3][3]; bool dfs(int v) { //cout<>n>>m; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { cin>>a[i][j]; for(int k=0;k<3;k++) for(int l=0;l<3;l++) ans[i][j][k][l]='.'; if(a[i][j]!=0) ans[i][j][1][1]='O'; sum[(i+j)%2]+=a[i][j]; } } if(sum[0]!=sum[1]) gg(); edge(1,2,sum[0]); int it=2; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(a[i][j]==0) continue; id[i][j]=++it; if(a[i][j]==2) { id1[i][j]=++it; id2[i][j]=++it; if((i+j)%2) { edge(id[i][j],id1[i][j],1); edge(id[i][j],id2[i][j],1); } else { edge(id1[i][j],id[i][j],1); edge(id2[i][j],id[i][j],1); } } } } it+=2; t=it; edge(it-1,it,sum[0]); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(a[i][j]==0) continue; if((i+j)%2) edge(2,id[i][j],a[i][j]); else edge(id[i][j],it-1,a[i][j]); } } for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if((i+j)%2==0||a[i][j]==0) continue; if(a[i-1][j]!=0) connect(i,j,i-1,j); if(a[i+1][j]!=0) connect(i,j,i+1,j); if(a[i][j-1]!=0) connect(i,j,i,j-1); if(a[i][j+1]!=0) connect(i,j,i,j+1); } } if(flow()!=sum[0]) gg(); //cout<