#include<bits/stdc++.h>
#define ll long long
#define ull unsigned long long
#define mp make_pair
#define pb push_back
#define pr pair<int,int>
#define x first
#define y second
using namespace std;
random_device R;
mt19937 Rnd(R());
int rint(int l,int r){return uniform_int_distribution<int>(l,r)(Rnd);}
const int maxn=1e5+10;
int T,n,u,v,ans,a[maxn][4],b[maxn][4];
char s[5][maxn];
int main()
{
freopen("edit.in","r",stdin);
freopen("edit.out","w",stdout);
scanf("%d",&T);
while(T--)
{
scanf("%d%s%s%s%s",&n,s[1]+1,s[2]+1,s[3]+1,s[4]+1),u=v=ans=0;
for(int i=1;i<=n;i++) if(s[3][i]=='0'&&s[4][i]=='0'&&s[1][i]==s[2][i]) ans++;
for(int i=1,j;i<=n;i=j+1)
{
j=i;
if(s[3][i]=='1')
{
while(j<n&&s[3][j+1]=='1') j++;
u++,a[u][0]=i,a[u][1]=j,a[u][2]=a[u][3]=0;
for(int k=i;k<=j;k++) a[u][2+s[1][k]-'0']++;
for(int k=i;k<=j;k++)
{
if(s[4][k]=='0')
{
if(a[u][2+s[2][k]-'0']) a[u][2+s[2][k]-'0']--,ans++;
else a[u][3-(s[2][k]-'0')]--;
}
}
}
}
for(int i=1,j;i<=n;i=j+1)
{
j=i;
if(s[4][i]=='1')
{
while(j<n&&s[4][j+1]=='1') j++;
v++,b[v][0]=i,b[v][1]=j,b[v][2]=b[v][3]=0;
for(int k=i;k<=j;k++) b[v][2+s[2][k]-'0']++;
for(int k=i;k<=j;k++)
{
if(s[3][k]=='0')
{
if(b[v][2+s[1][k]-'0']) b[v][2+s[1][k]-'0']--,ans++;
else b[v][3-(s[1][k]-'0')]--;
}
}
}
}
int c=1,d=1;
while(c<=u&&d<=v)
{
if(a[c][1]<b[d][0]) c++;
else if(a[c][0]>b[d][1]) d++;
else if(a[c][1]<=b[d][1])
{
int tmp[2]={min(a[c][2],b[d][2]),min(a[c][3],b[d][3])};
ans+=tmp[0]+tmp[1];
if(a[c][2]>b[d][2]) b[d][3]-=(a[c][2]-b[d][2]);
else if(a[c][3]>b[d][3]) b[d][2]-=(a[c][3]-b[d][3]);
b[d][2]-=tmp[0],b[d][3]-=tmp[1],c++;
}
else
{
int tmp[2]={min(a[c][2],b[d][2]),min(a[c][3],b[d][3])};
ans+=tmp[0]+tmp[1];
if(b[d][2]>a[c][2]) a[c][3]-=(b[d][2]-a[c][2]);
else if(b[d][3]>a[c][3]) a[c][2]-=(b[d][3]-a[c][3]);
a[c][2]-=tmp[0],a[c][3]-=tmp[1],d++;
}
}
printf("%d\n",ans);
}
return 0;
}