#include using namespace std; #define PI pair #define mkp make_pair #define fir first #define sec second #define pb emplace_back const int N=1e5+5,inf=0x3f3f3f3f; int T,n,cnt[2][2],sum[N][2][2]; string s1,s2,t1,t2; PI v1,v2; int work(int l,int r){ if(l>r) return 0; for(int i=0;i<2;++i) for(int j=0;j<2;++j) cnt[i][j]=0; int ans=0; v1=v2=mkp(0,0); for(int i=l;i<=r;++i){ if(t1[i]=='1'&&t2[i]=='1'){ ++cnt[0][s1[i]-'0'],++cnt[1][s2[i]-'0']; continue; } if(t1[i]=='0'){ int res0=min(cnt[0][0],v2.fir),res1=min(cnt[0][1],v2.sec); ans+=res0+res1,cnt[0][0]-=res0,cnt[0][1]-=res1; if(v2.fir>res0) cnt[0][1]-=v2.fir-res0; if(v2.sec>res1) cnt[0][0]-=v2.sec-res1; v2=mkp(0,0); ++cnt[0][s1[i]-'0'],++cnt[1][s2[i]-'0']; PI tmp=mkp(v1.fir+cnt[0][0],v1.sec+cnt[0][1]); v1=tmp,cnt[0][0]=cnt[0][1]=0; } if(t2[i]=='0'){ int res0=min(cnt[1][0],v1.fir),res1=min(cnt[1][1],v1.sec); ans+=res0+res1,cnt[1][0]-=res0,cnt[1][1]-=res1; if(v1.fir>res0) cnt[1][1]-=v1.fir-res0; if(v1.sec>res1) cnt[1][0]-=v1.sec-res1; v1=mkp(0,0); ++cnt[0][s1[i]-'0'],++cnt[1][s2[i]-'0']; PI tmp=mkp(v2.fir+cnt[1][0],v2.sec+cnt[1][1]); v2=tmp,cnt[1][0]=cnt[1][1]=0; } } cnt[0][0]+=v1.fir,cnt[0][1]+=v1.sec; cnt[1][0]+=v2.fir,cnt[1][1]+=v2.sec; int rs0=min(cnt[0][0],cnt[1][0]),rs1=min(cnt[0][1],cnt[1][1]); ans+=rs0+rs1; return ans; } void solve(){ cin>>n>>s1>>s2>>t1>>t2; s1=" "+s1,s2=" "+s2,t1=" "+t1,t2=" "+t2; int ans=0,last=0; for(int i=1;i<=n;++i) if(t1[i]=='0'&&t2[i]=='0') ans+=(s1[i]==s2[i])+work(last+1,i-1),last=i; ans+=work(last+1,n); cout<>T; while(T--) solve(); return 0; }