#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define SIZE 1000001
struct block{
ll l,r,n0,n1;
};
block new_block(ll l,ll r=0){
block b;
b.l=l;
b.r=r;
b.n0=0;
b.n1=0;
return b;
}
ll t,n;
string s1,s2,t1,t2;
vector<block> c1,c2;
int main(){
cin>>t;
while(t--){
c1.clear();
c2.clear();
cin>>n;
cin>>s1>>s2>>t1>>t2;
s1='0'+s1+'0';
s2='0'+s2+'0';
t1='0'+t1+'0';
t2='0'+t2+'0';
for(ll i=1;i<=n;i++){
if(t1[i]=='1'){
if(t1[i-1]=='0') c1.push_back(new_block(i));
if(t1[i+1]=='0') c1.back().r=i;
}
if(t2[i]=='1'){
if(t2[i-1]=='0') c2.push_back(new_block(i));
if(t2[i+1]=='0') c2.back().r=i;
}
if(t1[i]=='0') c1.push_back(new_block(i,i));
if(t2[i]=='0') c2.push_back(new_block(i,i));
}
for(ll i=0;i<c1.size();i++)
for(ll j=c1[i].l;j<=c1[i].r;j++)
if(s1[j]=='0') c1[i].n0++;
else c1[i].n1++;
for(ll i=0;i<c2.size();i++)
for(ll j=c2[i].l;j<=c2[i].r;j++)
if(s2[j]=='0') c2[i].n0++;
else c2[i].n1++;
ll i1=0,i2=0,res=0;
while(true){
ll add0=min(c1[i1].n0,c2[i2].n0);
ll add1=min(c1[i1].n1,c2[i2].n1);
c1[i1].n0-=add0;
c2[i2].n0-=add0;
c1[i1].n1-=add1;
c2[i2].n1-=add1;
res+=add0+add1;
if(c1[i1].r==c2[i2].r) i1++,i2++;
else if(c2[i2].r>c1[i1].r) i1++;
else if(c1[i1].r>c2[i2].r) i2++;
if(i1>=c1.size()||i2>=c2.size()) break;
}
cout<<res<<'\n';
}
return 0;
}