#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double db;
int n;
const int MAXN = 1e5+10;
char s1[MAXN],s2[MAXN],t1[MAXN],t2[MAXN];
int nxta[MAXN],nxtb[MAXN];
int work(){
scanf("%d",&n);
scanf("%s",s1+1);
scanf("%s",s2+1);
scanf("%s",t1+1);
scanf("%s",t2+1);
nxta[n+1]=nxtb[n+1]=n+1;
t1[n+1]='0',t2[n+1]='0';
for(int i=n;i;--i){
if(t1[i+1]=='0'||t1[i]=='0')nxta[i]=i;
else nxta[i]=nxta[i+1];
if(t2[i+1]=='0'||t2[i]=='0')nxtb[i]=i;
else nxtb[i]=nxtb[i+1];
}
int ans=0,ca1=0,ca2=0,cb1=0,cb2=0,w1=0,w2=0,p1=1,p2=1;
while(p1<=n||p2<=n){
if(p1<p2){
int e=nxta[p1];
while(p1<=e){
ca1+=s1[p1]=='1';ca2+=s1[p1]=='0';
++p1;++w1;
}
}else{
int e=nxtb[p2];
while(p2<=e){
cb1+=s2[p2]=='1',cb2+=s2[p2]=='0';
++p2;++w2;
}
}
int d1=min({w1,ca1,cb1,w2}),d2=min({w1,w2,cb2,ca2});ans+=min({d1+d2,w1,w2});
ca1-=min({d1,w1,w2});
ca2-=min({d2,w1,w2});
cb1-=min({d1,w1,w2});
cb2-=min({d2,w1,w2});
int d=min(w1,w2);
w1-=d;
w2-=d;
if(p1>=p2)cb1=cb2=w2=0;
if(p2>=p1)ca1=ca2=w1=0;
}
return ans;
}
int main(){
freopen("edit.in","r",stdin);
freopen("edit.out","w",stdout);
int T;scanf("%d",&T);
while(T--){
cout<<work()<<endl;
}
return 0;
}