#include<bits/stdc++.h>
#include<cmath>
#define ll long long
#define ull unsigned long long
#define lll __int128
#define N 200010
#define For(i,a,b) for(int i=a;i<=b;i++)
#define Rof(i,a,b) for(int i=a;i>=b;i--)
#define ls x<<1
#define rs x<<1|1
#define lson ls,l,mid
#define rson rs,mid+1,r
#define mk make_pair
#define pb push_back
#define pii pair<int,int>
#define pque priority_queue
#define fi first
#define se second
using namespace std;
char s1[N],s2[N],t1[N],t2[N];
int T,n;
ll read(){
ll x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
struct node{
int l,r,cnt0,cnt1;
};
queue<node >q1,q2;
void sol(){
n=read();
For(i,1,n) cin>>s1[i];
For(i,1,n) cin>>s2[i];
For(i,1,n) cin>>t1[i];
For(i,1,n) cin>>t2[i];
For(i,1,n){
if(t1[i]=='0') continue;
int r=i;
while(r<n && t1[r+1]=='1') r++;
int cnt0=0,cnt1=0;
For(j,i,r){
if(s1[j]=='1') cnt1++;
else cnt0++;
}
q1.push((node){i,r,cnt0,cnt1});
i=r;
}
For(i,1,n){
if(t2[i]=='0') continue;
int r=i;
while(r<n && t2[r+1]=='1') r++;
int cnt0=0,cnt1=0;
For(j,i,r){
if(s2[j]=='1') cnt1++;
else cnt0++;
}
q2.push((node){i,r,cnt0,cnt1});
i=r;
}
int ans=0,p00=0,p01=0,p10=0,p11=0;
For(i,1,n){
while(!q1.empty() && q1.front().l<=i){
p00+=q1.front().cnt0;
p01+=q1.front().cnt1;
q1.pop();
}
while(!q2.empty() && q2.front().l<=i){
p10+=q2.front().cnt0;
p11+=q2.front().cnt1;
q2.pop();
}
if(t1[i]=='0' && t2[i]=='0'){
if(s1[i]==s2[i]) ans++;
}else if(t1[i]=='1' && t2[i]=='0'){
if(s2[i]=='1'){
if(p01) ans++,p01--;
else p00--;
}else{
if(p00) ans++,p00--;
else p01--;
}
}else if(t1[i]=='0' && t2[i]=='1'){
if(s1[i]=='1'){
if(p11) ans++,p11--;
else p10--;
}else{
if(p10) ans++,p10--;
else p11--;
}
}else{
if(p00 && p10) ans++,p00--,p10--;
else if(p01 && p11) ans++,p01--,p11--;
else{
if(p00) p00--;
else p01--;
if(p10) p10--;
else p11--;
}
}
}
printf("%d\n",ans);
}
int main()
{
freopen("edit.in","r",stdin);
freopen("edit.out","w",stdout);
T=read();
while(T--) sol();
return 0;
}