#include<bits/stdc++.h>
using namespace std;
const int MAXSIZE=1e5+5;
int T,n;
int s1[MAXSIZE],s2[MAXSIZE],t1[MAXSIZE],t2[MAXSIZE];
int cnt1[2],cnt2[2];
void init()
{
memset(s1,0,sizeof(s1));
memset(s2,0,sizeof(s2));
memset(t1,0,sizeof(t1));
memset(t2,0,sizeof(t2));
cin>>n;
for(int i=1;i<=n;i++){
char c;
cin>>c;
s1[i]=c-48;
}
for(int i=1;i<=n;i++){
char c;
cin>>c;
s2[i]=c-48;
}
for(int i=1;i<=n;i++){
char c;
cin>>c;
t1[i]=c-48;
}
for(int i=1;i<=n;i++){
char c;
cin>>c;
t2[i]=c-48;
}
}
int min(int a,int b){ return (a<b)?a:b; }
int main()
{
freopen("edit.in","r",stdin);
freopen("edit.out","w",stdout);
std::ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
cin>>T;
while(T--)
{
init();
for(int i=1;i<=n;i++){
if(!(t1[i-1]|t1[i+1]))
t1[i]=0;
if(!(t2[i-1]|t2[i+1]))
t2[i]=0;
}
long long ans=0;
for(int l=1,r1=0,r2=0;l<=n;){
if(r1<l){
memset(cnt1,0,sizeof(cnt1));
while(t1[r1+1]){ r1++, cnt1[s1[r1]]++; }
if(r1<l){ r1++, cnt1[s1[r1]]++; }
}
if(r2<l){
memset(cnt2,0,sizeof(cnt2));
while(t2[r2+1]){ r2++, cnt2[s2[r2]]++; }
if(r2<l){ r2++, cnt2[s2[r2]]++; }
}
if(r1<=r2)
{
if(cnt1[0]<=cnt2[0]){ ans+=1ll*cnt1[0], cnt2[0]-=cnt1[0], cnt1[0]=0; }
if(cnt1[1]<=cnt2[1]){ ans+=1ll*cnt1[1], cnt2[1]-=cnt1[1], cnt1[1]=0; }
if(cnt1[0]>cnt2[0]){ ans+=1ll*cnt2[0], cnt1[0]-=cnt2[0], cnt2[0]=0, cnt2[1]-=cnt1[0], cnt1[0]=0; }
if(cnt1[1]>cnt2[1]){ ans+=1ll*cnt2[1], cnt1[1]-=cnt2[1], cnt2[1]=0, cnt2[0]-=cnt1[1], cnt1[1]=0; }
l=r1+1;
}
else
{
if(cnt2[0]<=cnt1[0]){ ans+=1ll*cnt2[0], cnt1[0]-=cnt2[0], cnt2[0]=0; }
if(cnt2[1]<=cnt1[1]){ ans+=1ll*cnt2[1], cnt1[1]-=cnt2[1], cnt2[1]=0; }
if(cnt2[0]>cnt1[0]){ ans+=1ll*cnt1[0], cnt2[0]-=cnt1[0], cnt1[0]=0, cnt1[1]-=cnt2[0], cnt2[0]=0; }
if(cnt2[1]>cnt1[1]){ ans+=1ll*cnt1[1], cnt2[1]-=cnt1[1], cnt1[1]=0, cnt1[0]-=cnt2[1], cnt2[1]=0; }
l=r2+1;
}
}
cout<<ans<<endl;
}
fclose(stdin);
fclose(stdout);
return 0;
}