#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+5;
int n,tot,tot2;
bool s[N],s2[N],t[N],t2[N];
struct uuu{
	int cntb,cntw,l,r;
}a[N],b[N];
void readd()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		char ch;
		cin>>ch;
		s[i]=ch-'0';
	}
	for(int i=1;i<=n;i++)
	{
		char ch;
		cin>>ch;
		s2[i]=ch-'0';
	}
	for(int i=1;i<=n;i++)
	{
		char ch;
		cin>>ch;
		t[i]=ch-'0';
	}
	for(int i=1;i<=n;i++)
	{
		char ch;
		cin>>ch;
		t2[i]=ch-'0';
	}
}
void solvea()
{
	int cnt=0;
	for(int i=1;i<=n;i++)
	{
		if(s[i]==s2[i]) cnt++;
	}
	cout<<cnt<<"\n";
}
void solveb()
{
	int cnt=0;
	for(int i=1;i<=n;i++)
	{
		if(t[i]==0 && s[i]==s2[i]) cnt++;
	}
	for(int i=1;i<=n;i++)
	{
		if(t[i]==1)
		{
			int cntb=0,cntw=0,cntb2=0,cntw2=0;
			while(i<=n && t[i]==1)
			{
				if(s[i]==1) cntb++;
				if(s[i]==0) cntw++;
				if(s2[i]==1) cntb2++;
				if(s2[i]==0) cntw2++;
				i++;
			}
			i--;
			cnt+=min(cntb,cntb2)+min(cntw,cntw2);
		}
	}
	cout<<cnt<<"\n";
}
bool b1=0;
void teshuxingzhi()
{
	bool fla=1;
	for(int i=1;i<=n-1;i++)
	{
		if(s[i]!=s[i+1])
		{
			fla=0;
			break;
		}
	}
	if(fla)
	{
		b1=1;
		solvea();
		return ;
	}
	bool flb=1;
	for(int i=1;i<=n;i++)
	{
		if(t[i]!=t2[i])
		{
			flb=0;
			break;
		}
	}
	if(flb)
	{
		b1=1;
		solveb();
		return ;
	}
}
void init()
{
	b1=0;
	tot=tot2=0;
}
int jiao(int l,int r,int ll,int rr)
{
	int L=max(l,ll),R=min(r,rr);
	return R-L+1;
}
void solve()
{
	init();
	readd();
	teshuxingzhi();
	if(b1) return ;
//	cout<<"-----";
	for(int i=1;i<=n;i++)
	{
		if(t[i]==1)
		{
			a[++tot].l=i;
			a[tot].cntb=a[tot].cntw=0;
			while(i<=n && t[i]==1)
			{
				if(s[i]==1) a[tot].cntb++;
				if(s[i]==0) a[tot].cntw++;
				i++;
			}
			i--;
			a[tot].r=i;
		}else
		{
			a[++tot].l=i,a[tot].r=i;
			a[tot].cntb=a[tot].cntw=0;
			if(s[i]==1) a[tot].cntb=1;
			if(s[i]==0) a[tot].cntw=1;
		}
	}
	for(int i=1;i<=n;i++)
	{
		if(t2[i]==1)
		{
			b[++tot2].l=i;
			b[tot2].cntb=b[tot2].cntw=0;
			while(i<=n && t2[i]==1)
			{
				if(s2[i]==1) b[tot2].cntb++;
				if(s2[i]==0) b[tot2].cntw++;
				i++;
			}
			i--;
			b[tot2].r=i;
		}else
		{
			b[++tot2].l=i,b[tot2].r=i;
			b[tot2].cntb=b[tot2].cntw=0;
			if(s2[i]==1) b[tot2].cntb=1;
			if(s2[i]==0) b[tot2].cntw=1;
		}
	}
	int ra=0,rb=0,ans=0;
//	cout<<tot<<" "<<tot2<<"\n";
	for(int i=1,j=1;i<=tot && j<=tot2;)	
	{
		ra=a[i].r,rb=b[j].r;
		int mb=min(a[i].cntb,b[j].cntb),mw=min(a[i].cntw,b[j].cntw);
		int p=jiao(a[i].l,a[i].r,b[j].l,b[j].r);
//		cout<<i<<" "<<j<<" "<<p<<"\n";
		if(mb+mw<=p)
		{
			ans+=mb+mw;
	//		cout<<i<<" "<<j<<" "<<ra<<" "<<rb<<" "<<ans<<"\n";
			a[i].cntb-=mb,a[i].cntw-=mw;
			b[j].cntb-=mb,b[j].cntw-=mw;
		}else if(mb+mw>p)
		{
//			cout<<i<<" "<<j<<" "<<ans<<"---";
			if(mb>p)
			{
				ans+=p;
				a[i].cntb-=p,b[j].cntb-=p;
			}else
			{
				p-=mb;
				ans+=mb;
				a[i].cntb-=mb,b[j].cntb-=mb;
				if(mw>p)
				{
					ans+=p;
					a[i].cntw-=p,b[j].cntw-=p;
				}else
				{
					ans+=mw;
					a[i].cntw-=mw,b[j].cntw-=mw;
				}
			}
		}
		if(ra>rb) j++;
		else if(ra<rb) i++;
		else i++,j++;
	}
	cout<<ans<<"\n";
}
signed main()
{
	freopen("edit.in","r",stdin);
	freopen("edit.out","w",stdout);
	int _;
	cin>>_;
	while(_--)
	{
//		cout<<_<<"\n";
		solve();
	}
}
