#include <bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int t,n;
char s1[N],s2[N],t1[N],t2[N];
int sum1[N][2],sum2[N][2],l1[N],l2[N],r1[N],r2[N],tj1[N][2],tj2[N][2];
int main(){
freopen("edit.in","r",stdin);
freopen("edit.out","w",stdout);
scanf("%d",&t);
while (t--){
int ans=0;
memset (sum1,0,sizeof(sum1));
memset (sum2,0,sizeof(sum2));
memset (tj1,0,sizeof(tj1));
memset (tj2,0,sizeof(tj2));
memset (l1,0,sizeof(l1));
memset (r1,0,sizeof(l1));
memset (l2,0,sizeof(l2));
memset (r2,0,sizeof(r2));
memset (s1,0,sizeof(s1));
memset (s2,0,sizeof(s2));
memset (t1,0,sizeof(t1));
memset (t2,0,sizeof(t2));
scanf("%d",&n);
scanf("%s",s1+1);
scanf("%s",s2+1);
scanf("%s",t1+1);
scanf("%s",t2+1);
t1[0]=t1[n+1]=t2[0]=t2[n+1]='0';
int cnt1=0,cnt2=0;
for (int i=1;i<=n;i++){
sum1[i][0]=sum1[i-1][0],sum1[i][1]=sum1[i-1][1];
sum2[i][0]=sum2[i-1][0],sum2[i][1]=sum2[i-1][1];
if (s1[i]=='1')sum1[i][1]++;
else sum1[i][0]++;
if (s2[i]=='1')sum2[i][1]++;
else sum2[i][0]++;
if (t1[i]=='1'){
if (t1[i-1]=='0')cnt1++,l1[cnt1]=i;
if (t1[i+1]=='0')r1[cnt1]=i;
}
else {
cnt1++;
l1[cnt1]=r1[cnt1]=i;
}
if (t2[i]=='1'){
if (t2[i-1]=='0')cnt2++,l2[cnt2]=i;
if (t2[i+1]=='0')r2[cnt2]=i;
}
else {
cnt2++;
l2[cnt2]=r2[cnt2]=i;
}
}
for (int i=1;i<=cnt1;i++){
tj1[i][0]=sum1[r1[i]][0]-sum1[l1[i]-1][0];
tj1[i][1]=sum1[r1[i]][1]-sum1[l1[i]-1][1];
}
for (int i=1;i<=cnt2;i++){
tj2[i][0]=sum2[r2[i]][0]-sum2[l2[i]-1][0];
tj2[i][1]=sum2[r2[i]][1]-sum2[l2[i]-1][1];
}
int i1=1,i2=1;
while (i1<=cnt1&&i2<=cnt2){
if (l1[i1]>r2[i2]){
i2++;
continue;
}
if (l2[i2]>r1[i1]){
i1++;
continue;
}
int nm=min(r1[i1],r2[i2])-max(l1[i1],l2[i2])+1;
int m1=min(tj1[i1][1],tj2[i2][1]),m0=min(tj1[i1][0],tj2[i2][0]);
if (m1+m0<=nm){
ans+=m1+m0;
tj1[i1][1]-=m1,tj1[i1][0]-=m0;
tj2[i2][1]-=m1,tj2[i2][0]-=m0;
}
else{
ans+=nm;
if (m1>=nm){
tj1[i1][1]-=nm;
tj2[i2][1]-=nm;
}
else {
nm-=m1;
tj1[i1][1]-=m1;
tj2[i2][1]-=m1;
tj1[i1][0]-=nm;
tj2[i2][0]-=nm;
}
}
if (r2[i2]>r1[i1]){
i1++;
continue;
}
else {
i2++;
continue;
}
}
cout<<ans<<"\n";
}
return 0;
}