#include using namespace std; int n,nxt1[100005],nxt2[100005],cnt1[100005][2],cnt2[100005][2]; char s1[100005],s2[100005],t1[100005],t2[100005]; int main(){ freopen("edit.in","r",stdin); freopen("edit.out","w",stdout); int TTTQ; cin>>TTTQ; while(TTTQ--){ scanf("%d%s%s%s%s",&n,s1+1,s2+1,t1+1,t2+1); nxt1[n+1]=nxt2[n+1]=n+1; cnt1[n+1][0]=cnt1[n+1][1]=cnt2[n+1][0]=cnt2[n+1][1]=0; for(int i=n;i>=1;i--){ cnt1[i][0]=cnt1[i][1]=cnt2[i][0]=cnt2[i][1]=0; if(t1[i]=='0'){ nxt1[i]=i; } else{ nxt1[i]=nxt1[i+1]; } if(t2[i]=='0'){ nxt2[i]=i; } else{ nxt2[i]=nxt2[i+1]; } } for(int i=1;i<=n;i++){ if(t1[i]=='1') cnt1[nxt1[i]-1][s1[i]-48]++; if(t2[i]=='1') cnt2[nxt2[i]-1][s2[i]-48]++; } int ans=0; for(int i=1;i<=n;i++){ bool b10,b11,b20,b21; if(t1[i]=='1'){ b10=(cnt1[nxt1[i]-1][0]>0); b11=(cnt1[nxt1[i]-1][1]>0); } else{ b10=(s1[i]=='0'); b11=(s1[i]=='1'); } if(t2[i]=='1'){ b20=(cnt2[nxt2[i]-1][0]>0); b21=(cnt2[nxt2[i]-1][1]>0); } else{ b20=(s2[i]=='0'); b21=(s2[i]=='1'); } if(b10&&b20){ if(t1[i]=='1'){ cnt1[nxt1[i]-1][0]--; } if(t2[i]=='1'){ cnt2[nxt2[i]-1][0]--; } ans++; } else if(b11&&b21){ if(t1[i]=='1'){ cnt1[nxt1[i]-1][1]--; } if(t2[i]=='1'){ cnt2[nxt2[i]-1][1]--; } ans++; } } printf("%d\n",ans); } return 0; }