#include<bits/stdc++.h>
using namespace std;
long long ttt,n,cnt,cntt,ans;
long long cnt0[100005];
long long cntt0[100005];
char s[100005],ss[100005];
char t[100005],tt[100005];
struct node{
	long long l,r,sum0;
}g[100005],gg[100005];
int main()
{
	freopen("edit.in","r",stdin);
	freopen("edit.out","w",stdout);
	scanf("%lld",&ttt);
	while(ttt--)
	{
		ans=0;cnt=0;cntt=0;
		scanf("%lld%s%s%s%s",&n,s+1,ss+1,t+1,tt+1);
		long long l=1,ll=1;
		t[n+1]='0';tt[n+1]='0';
		s[n+1]='0';ss[n+1]='1';
		for(int i=1;i<=n+1;i++) cnt0[i]=cnt0[i-1]+(s[i]=='0'),cntt0[i]=cntt0[i-1]+(ss[i]=='0');
		for(int i=1;i<=n+1;i++)
		{
			if(t[i]=='0')
			{
				g[++cnt].l=l;
				g[cnt].r=i;
				g[cnt].sum0=cnt0[i-1]-cnt0[l-1];
				l=i+1;
			}
			if(tt[i]=='0')
			{
				gg[++cntt].l=ll;
				gg[cntt].r=i;
				gg[cntt].sum0=cntt0[i-1]-cntt0[ll-1];
				ll=i+1;
			}
		}
		long long o=1;
		for(int i=1;i<=cnt;i++)
		{
			bool bz=1;
			while(bz)
			{
				long long r=min(g[i].r,gg[o].r);
				if(r==g[i].r)
				{
					bz=0;
					long long h=0;
					if(r==gg[o].r) 
					{
						ans+=(s[r]==ss[r]);
						ans+=min(g[i].sum0,gg[o].sum0)+min(g[i].r-g[i].l-g[i].sum0,gg[o].r-gg[o].l-gg[o].sum0);
					}
					else
					{
						if(r==g[i].r) h++,g[i].sum0+=(s[r]=='0');
						ans+=min(g[i].sum0,gg[o].sum0)+min(g[i].r-g[i].l+1-g[i].sum0,gg[o].r-gg[o].l-gg[o].sum0);
					}
					long long vv=min(g[i].sum0,gg[o].sum0);
					if(gg[o].r-gg[o].l-gg[o].sum0+min(g[i].sum0,gg[o].sum0)<r-gg[o].l+1)
					{
						gg[o].sum0-=r-gg[o].l+1-(gg[o].r-gg[o].l-gg[o].sum0+min(g[i].sum0,gg[o].sum0));
					}
					gg[o].sum0-=vv;
					
					g[i].l=r+1;
					gg[o].l=r+1;
				}
				else
				{
					long long h=0;
					if(r==gg[o].r) h++,gg[o].sum0+=(ss[r]=='0');
					ans+=min(g[i].sum0,gg[o].sum0)+min(g[i].r-g[i].l-g[i].sum0,gg[o].r-gg[o].l+h-gg[o].sum0);
					long long vv=min(g[i].sum0,gg[o].sum0);
					if(g[i].r-g[i].l-g[i].sum0+min(g[i].sum0,gg[o].sum0)<r-g[i].l+1)
					{
						g[i].sum0-=r-g[i].l+1-(g[i].r-g[i].l-g[i].sum0+min(g[i].sum0,gg[o].sum0));
					}
					g[i].sum0-=vv;
					
					if(gg[o].r-gg[o].l+h-gg[o].sum0+vv<r-gg[o].l+1)
					{
						gg[o].sum0-=r-gg[o].l+1-(gg[o].r-gg[o].l+h-gg[o].sum0+vv);
					}
					gg[o].sum0-=vv;
					
					g[i].l=r+1;
					gg[o].l=r+1;
				}
				if(gg[o].l>gg[o].r) o++;
			}
		}
		printf("%lld\n",ans);
	}
	return 0;
}
