#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int n,ans,lst,pre1[N],pre2[N];
char s1[N],s2[N],t1[N],t2[N];
#define pii pair<int,int>
#define fi first
#define se second
#define pb push_back
struct node{int l,r,cnt;};
vector<node>a,b;
void solve(){
ans=0;a.clear();b.clear();
cin>>n>>(s1+1)>>(s2+1)>>(t1+1)>>(t2+1);
lst=-1;
for(int i=1;i<=n;i++){
pre1[i]=pre1[i-1]+(s1[i]=='0');
if(t1[i]=='1'){
if(lst==-1)lst=i;
}else{
if(lst!=-1)a.pb({lst,i-1,pre1[i-1]-pre1[lst-1]});
a.pb({i,i,s1[i]=='0'});
lst=-1;
}
}
if(lst!=-1)a.pb({lst,n,pre1[n]-pre1[lst-1]});
lst=-1;
for(int i=1;i<=n;i++){
pre2[i]=pre2[i-1]+(s2[i]=='0');
if(t2[i]=='1'){
if(lst==-1)lst=i;
}else{
if(lst!=-1)b.pb({lst,i-1,pre2[i-1]-pre2[lst-1]});
b.pb({i,i,s2[i]=='0'});
lst=-1;
}
}
if(lst!=-1)b.pb({lst,n,pre2[n]-pre2[lst-1]});
int p=0,q=0;
while(p<a.size()&&q<b.size()){
node &x=a[p],&y=b[q];
if(x.r>=y.r){
int cx=x.cnt,dx=x.r-x.l+1-cx;
int cy=y.cnt,dy=y.r-y.l+1-cy;
int c0=min(cx,cy),d0=cy;
if(x.r==y.r)c0=cx;
if(dx<dy)c0=cy+dy-dx;
ans+=y.r-y.l+1+min(c0,d0)-max(c0,d0);
++q;x.l=y.r+1;x.cnt-=c0;
if(x.l>x.r)++p;
}else{
int cx=x.cnt,dx=x.r-x.l+1-cx;
int cy=y.cnt,dy=y.r-y.l+1-cy;
int c0=cx,d0=min(cx,cy);
if(dy<dx)d0=cx+dx-dy;
ans+=x.r-x.l+1+min(c0,d0)-max(c0,d0);
++p;y.l=x.r+1;y.cnt-=d0;
if(y.l>y.r)++q;
}
}
cout<<ans<<'\n';
}
int main(){
freopen("edit.in","r",stdin);
freopen("edit.out","w",stdout);
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int T;cin>>T;
while(T--)solve();
return 0;
}