#include<iostream>
#include<cstdio>
#include<vector>
#include<queue>
#include<utility>
#include<cstring>
#include<string>
#include<algorithm>
#include<cmath>
using namespace std;
const int N=1e5+4;
int T;
int s1[N],s2[N],t1[N],t2[N],sum1[N],sum2[N];
queue<pair<int,int> >q;
int n,ans;
//服了第一题调半天，啊,暴力没出来！ 
int work()
{
	int sum=0;
	for(int i=1;i<=n;i++)
	{
		if(s1[i]==s2[i]) sum++;
	}
	return sum;
}
void dfs(int x)
{
	if(x>=n) return;
	ans=max(ans,work());
	dfs(x+1);
	if(t1[x+1]==1&&t1[x]==1)
	{
		dfs(x+1);//不换 
		if(t2[x+1]==1&&t2[x]==1)
		{
			swap(s1[x],s1[x+1]);
			swap(s2[x],s2[x+1]);
			dfs(x+1);
		}
	}
	if(t2[x+1]==1&&t2[x]==1)//1
	{
		dfs(x+1);//不换 
		if(t1[x+1]==1&&t1[x]==1)//1
		{
			swap(s1[x],s1[x+1]);
			swap(s2[x],s2[x+1]);
			dfs(x+1);
		}
	}
}
int main()
{
	freopen("edit.in","r",stdin);
	freopen("edit.out","w",stdout);
	scanf("%d",&T);
	while(T--)
	{
		ans=0;
		memset(t2,0,sizeof(t2));
		memset(t1,0,sizeof(t1));
		memset(s1,0,sizeof(s1));
		memset(s2,0,sizeof(s2));
		memset(sum1,0,sizeof(sum1));
		memset(sum2,0,sizeof(sum1));
		n=0;
		while(!q.empty())
		{
			q.pop();
		}
		scanf("%d",&n);
		for(int i=1;i<=n;i++)
		{
			char x;
			scanf("  %c",&x);
			s1[i]=x-'0';
		}
		for(int i=1;i<=n;i++)
		{
			char x;
			scanf("  %c",&x);
			s2[i]=x-'0';
		}
		for(int i=1;i<=n;i++)
		{
			char x;
			scanf("  %c",&x);
			t1[i]=x-'0';
		}
		for(int i=1;i<=n;i++)
		{
			char x;
			scanf("  %c",&x);
			t2[i]=x-'0';
		}
		for(int i=1;i<=n;i++)
		{
			sum1[i]=sum1[i-1]+s1[i];//1的数量
			sum2[i]=sum2[i-1]+s2[i]; 
		}
		//s1所有相同
		int flag=0;
		for(int i=2;i<=n;i++)
		{
			if(s1[i]!=s1[i-1]) {flag=1;break;}
		}
		if(flag==0)
		{
			if(s1[1]==1)
			{
				printf("%d\n",sum2[n]);
				continue;
			}
			else//为0 
			{
				printf("%d\n",n-sum2[n]);
				continue;
			}
		}
		dfs(1);
		printf("%d\n",ans);
		//找相同的区间 
		/*
		flag=0;
		int l,r;
		for(int i=1;i<=n;i++)
		{
			if(!flag&&t1[i]==t2[i]&&t1[i]==1)
			{
				l=i;
				flag=1;
			}
			if(flag&&(t1[i]==0||t2[i]==0))
			{
				r=i-1;
				q.push(make_pair(l,r));
				flag=0;
			}
		}
		*/
		//t1==t2
		/*
		flag=0;
		for(int i=1;i<=n;i++)
		{
			if(t1[i]!=t2[i]) {flag=1;break;}
		}
		if(flag==0)
		{
			
			for(int i=1;i<=n;i++)
			{
				if(t1[i]==0&&s1[i]==s2[i])
				{
					ans++;
				}
			}
			int st=0;
			while(!q.empty())
			{
				int L=q.front().first,R=q.front().second;
				q.pop();
				ans+=work(L,R);
			}
			printf("%d\n",ans);
		}*/
		//
		/*
		flag=0;
		//t中0只有一个
		int flag1=0,flag2=0;
		for(int i=1;i<=n;i++)
		{
			if(t1[i]==0) {flag1=i;continue;}
			if(t1[i]==0&&flag1!=0) {flag1=0;break;}
		}
		for(int i=1;i<=n;i++)
		{
			if(t2[i]==0) {flag2=i;continue;}
			if(t2[i]==0&&flag2!=0) {flag2=0;break;}
		}
		if(flag1!=0&&flag2!=0)
		{
			if(flag1==flag2&&s1[flag1]==s2[flag2]) ans++;
			else
			{
				for(int i=1;i<=n;i++)
				{
					if(s1[flag2+i]==0) {ans++;break;}
					if(s1[flag2-i]==0) {ans++;break;}
				}
			}
			while(!q.empty())
			{
				int L=q.front().first,R=q.front().second;
				q.pop();
				ans+=work(L,R);
			}
			printf("%d\n",ans);
		}*/
	}
	
	return 0;
}

