#include<bits/stdc++.h>
using namespace std;
int read()
{
	int x=0,w=1;
	char c=0;
	while(c<'0'||c>'9')
	{
		if(c=='-')w=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9')
	{
		x=(x<<1)+(x<<3)+c-'0';
		c=getchar();
	}
	return x*w;
}
const int maxn=1e5+9;
char s1[maxn],s2[maxn],t1[maxn],t2[maxn];
//bool ok10[maxn],ok11[maxn];
//bool ok20[maxn],ok21[maxn];
int belong1[maxn],belong2[maxn];
int cnt10[maxn],cnt11[maxn];
int cnt20[maxn],cnt21[maxn];
void solve()
{
	memset(cnt10,0,sizeof(cnt10));
	memset(cnt11,0,sizeof(cnt11));
	memset(cnt20,0,sizeof(cnt20));
	memset(cnt21,0,sizeof(cnt21));
	int n;n=read();
	scanf("%s %s %s %s",s1+1,s2+1,t1+1,t2+1);
//	for(int i=1;i<=n;i++)
//	{
//		if(s1[i]=='0')ok10[i]=true;
//		else ok11[i]=true;
//		if(s2[i]=='0')ok20[i]=true;
//		else ok21[i]=true;
//	}
	int lst=0;
	t1[n+1]='0';
	int tot=0;
	for(int i=1;i<=n+1;i++)
	{
		if(t1[i]=='0')
		{
			if(i<=n)
			{
				belong1[i]=++tot;
				if(s1[i]=='0')cnt10[tot]++;
				else cnt11[tot]++;
			}
			++tot;
			for(int j=lst+1;j<=i-1;j++)
			{
				belong1[j]=tot;
				if(s1[j]=='0')cnt10[tot]++;
				if(s1[j]=='1')cnt11[tot]++;
			}
			lst=i;
		}
	}
	lst=0;
	tot=0;
	t2[n+1]='0';
	for(int i=1;i<=n+1;i++)
	{
		if(t2[i]=='0')
		{
			if(i<=n)
			{
				belong2[i]=++tot;
				if(s2[i]=='0')cnt20[tot]++;
				else cnt21[tot]++;
			}
			++tot;
			for(int j=lst+1;j<=i-1;j++)
			{
				belong2[j]=tot;
				if(s2[j]=='0')cnt20[tot]++;
				if(s2[j]=='1')cnt21[tot]++;
			}
			lst=i;
		}
	}
	int ans=0;
	for(int i=1;i<=n;i++)
	{
		if(cnt10[belong1[i]]&&cnt20[belong2[i]])
		{
			--cnt10[belong1[i]];
			--cnt20[belong2[i]];
			ans++;
		}
		else if(cnt11[belong1[i]]&&cnt21[belong2[i]])
		{
			--cnt11[belong1[i]];
			--cnt21[belong2[i]];
			ans++;
		}
	}
	printf("%d\n",ans);
} 
int main()
{
	freopen("edit.in","r",stdin);
	freopen("edit.out","w",stdout);
	int T;T=read();
	while(T--)solve();
	return 0;
}

