#include<bits/stdc++.h>
using namespace std;
#define N 100005
int T,n,ans;
char aa[N],bb[N],s[N],t[N];
struct node{int l,r,s0,s1;};
vector<node> a,b;
int main(){
freopen("edit.in","r",stdin);
freopen("edit.out","w",stdout);
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>T;
while(T--){
cin>>n>>(aa+1)>>(bb+1)>>(s+1)>>(t+1);
ans=0;
a.clear(),b.clear();
for(int i=1,l=0,sm=0;i<=n;++i){
if(s[i]=='0'){
if(l!=i-1){
a.push_back((node){l+1,i-1,0,sm});
}
a.push_back((node){i,i,0,aa[i]=='1'});
l=i,sm=0;
}else{
sm+=(aa[i]=='1');
if(i==n){
a.push_back((node){l+1,n,0,sm});
}
}
}
for(int i=1,l=0,sm=0;i<=n;++i){
if(t[i]=='0'){
if(l!=i-1){
b.push_back((node){l+1,i-1,0,sm});
}
b.push_back((node){i,i,0,bb[i]=='1'});
l=i,sm=0;
}else{
sm+=(bb[i]=='1');
if(i==n){
b.push_back((node){l+1,n,0,sm});
}
}
}
for(int i=0;i<a.size();++i) a[i].s0=(a[i].r-a[i].l+1)-a[i].s1;
for(int i=0;i<b.size();++i) b[i].s0=(b[i].r-b[i].l+1)-b[i].s1;
for(int i=0,j=0,c0,c1,r;i<a.size()&&j<b.size();){
c0=min(a[i].s0,b[j].s0),c1=min(a[i].s1,b[j].s1);
r=min(a[i].r,b[j].r);
ans+=c0+c1;
a[i].s0-=c0,a[i].s1-=c1;
b[j].s0-=c0,b[j].s1-=c1;
if(a[i].r<b[j].r){
++i;
if(b[j].s0==0) b[j].s1=min(b[j].s1,b[j].r-r);
if(b[j].s1==0) b[j].s0=min(b[j].s0,b[j].r-r);
}else if(a[i].r==b[j].r){
++i,++j;
}else{
++j;
if(a[i].s0==0) a[i].s1=min(a[i].s1,a[i].r-r);
if(a[i].s1==0) a[i].s0=min(a[i].s0,a[i].r-r);
}
}
cout<<ans<<'\n';
}
}