#include <bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
int n,a[maxn],b[maxn],c[maxn],d[maxn];

void read(int n,int *t)
{
	for(int i=1;i<=n;i++)
	{
		char x;
		cin>>x;
		t[i]=x-'0';
	}
}

vector<int> vec;
int ta[2],tb[2];
void solve()
{
	cin>>n;
	read(n,a);read(n,b);read(n,c);read(n,d);
	vec.clear();
	for(int i=1;i<=n;i++)
	{
		int t1=c[i],t2=d[i];
		int j=i;
		while(c[j+1]==t1&&d[j+1]==t2) j++;
		vec.push_back(j);
		i=j;
	}
//	for(int x:vec) cout<<x<<" ";
//	cout<<endl;
	int p=1,ans=0;
	for(int x:vec)
	{
		if(c[p]==0&&d[p]==0)
			for(int i=p;i<=x;i++) ans+=(a[i]==b[i]);
		else
		{
			if(!c[p-1]&&c[p]) for(int y=p;c[y];ta[a[y]]++,y++);
			if(!d[p-1]&&d[p]) for(int y=p;d[y];tb[b[y]]++,y++);
			if(c[p]&&d[p])
			{
				for(int i=p;i<=x;i++)
					if(ta[0]&&tb[0]) ans++,ta[0]--,tb[0]--;
					else if(ta[1]&&tb[1]) ans++,ta[1]--,tb[1]--;
					else ta[0]-=!!(ta[0]),ta[1]-=!!(ta[1]),tb[0]-=!!(tb[0]),tb[1]-=!!(tb[1]);
			}
			else
			{
				if(c[p])
				{
					for(int i=p;i<=x;i++)
						if(ta[b[i]]) ans++,ta[b[i]]--;
						else ta[!b[i]]--;
				}
				if(d[p])
				{
					for(int i=p;i<=x;i++)
						if(tb[a[i]]) ans++,tb[a[i]]--;
						else tb[!a[i]]--;
				}
			}
		}
		p=x+1;
	}
	cout<<ans<<endl;
	memset(a,0,sizeof(a));
	memset(b,0,sizeof(b));
	memset(c,0,sizeof(c));
	memset(d,0,sizeof(d));
	ta[0]=ta[1]=tb[0]=tb[1]=0;
	ans=0;
	return;
}

int main()
{
	freopen("edit.in","r",stdin);
	freopen("edit.out","w",stdout);
	ios::sync_with_stdio(false);
	cin.tie(nullptr);
	int T;
	cin>>T;
	while(T--) solve();
	return 0;
}
/*
1
6
011101
111010
111010
101101
*/
