#include<bits/stdc++.h>
using namespace std;
struct node{
	int o,i;
};
int len,ans,ass;
char a[100005];
char b[100005];
char aa[100005];
char bb[100005];
int ay[100005];
int by[100005];
node at[100005];
node bt[100005];
void dfs(int now){
	ass=max(ass,ans);
	if(now>len)return;
	
	if(aa[now]=='0'&&bb[now]=='0'){
		if(a[now]==b[now]){
			ans++;
			dfs(now+1);
			ans--;
		}
	}else if(aa[now]=='0'){
		if(a[now]=='1'){
			if(bt[by[now]].i>0){
				bt[by[now]].i--;
				ans++;
				dfs(now+1);
				ans--;
			}
		}else if(bt[by[now]].o>0){
			bt[by[now]].o--;
			ans++;
			dfs(now+1);
			ans--;
		}else{
			dfs(now+1);
		}
	}else if(bb[now]=='0'){
		if(b[now]=='1'){
			if(at[ay[now]].i>0){
				at[ay[now]].i--;
				ans++;
				dfs(now+1);
				ans--;
			}
		}else if(at[ay[now]].o>0){
			at[ay[now]].o--;
			ans++;
			dfs(now+1);
			ans--;
		}else{
			dfs(now+1);
		}
	}else{
		int win=0,ar=ay[now],br=by[now];
		while(aa[now]=='1'&&bb[now]=='1'&&now<=len){
			win++;now++;
		}
		int ai=at[ar].i,ao=at[ar].o;
		int bi=bt[br].i,bo=bt[br].o;
		int i=min(ai,bi);
		int o=min(ao,bo);
		if(o+i>win){
			ans+=win;
			int oo=o-win;
			if(o>win){
				at[ar].o-=win;
				bt[br].o-=win;
				
			}else{
				at[ar].o=0;
				bt[br].o=0;
				at[ar].i+=oo;
				bt[br].i+=oo;
			}
			dfs(now);
			int ii=i-win;
			if(i>win){
				at[ar].i-=win;
				bt[br].i-=win;
				
			}else{
				at[ar].i=0;
				bt[br].i=0;
				at[ar].o+=ii;
				bt[br].o+=ii;
			}
			dfs(now);
			at[ar].i=ai;
			bt[br].i=bi;
			at[ar].o=ao;
			bt[br].o=bo;
			ans-=win;
		}else{
			at[ar].i-=i;
			bt[br].i-=i;
			at[ar].o-=o;
			bt[br].o-=o;
			ans+=i+o;
			dfs(now);
			ans-=i+o;
			at[ar].i=ai;
			bt[br].i=bi;
			at[ar].o=ao;
			bt[br].o=bo;
		}
		return;
	}
	
}

void sol(){
	ans=ass=0;
	memset(at,0,sizeof(at));
	memset(bt,0,sizeof(bt));
	memset(ay,0,sizeof(ay));
	memset(by,0,sizeof(by));
	
	cin>>len;
	ans=0;
	int k;
	for(int i=1;i<=len;i++)cin>>a[i];
	for(int i=1;i<=len;i++)cin>>b[i];
	for(int i=1;i<=len;i++)cin>>aa[i];
	for(int i=1;i<=len;i++)cin>>bb[i];
	int ao,ai,bo,bi,co,ci;
	for(int i=1;i<=len;i++){
		if(aa[i]=='1'){
			if(aa[i-1]!='1')ay[0]++;
			ay[i]=ay[0];
			if(a[i]=='1')at[ay[0]].i++;
			else at[ay[0]].o++;
		}
	}
	for(int i=1;i<=len;i++){
		if(bb[i]=='1'){
			if(bb[i-1]!='1')by[0]++;
			by[i]=by[0];
			if(b[i]=='1')bt[by[0]].i++;
			else bt[by[0]].o++;
		}
	}
	dfs(1);
	cout<<ass<<endl;
}
int main(){
	freopen("edit.in","r",stdin);freopen("edit.out","w",stdout);
	int t=1;
	cin>>t;
	for(int i=1;i<=t;i++){
		sol();
	}
}
/*


2
6
011101
111010

111010
101101
5
01101
11011
10101
10011


1



*/
