#include<bits/stdc++.h>
#define il inline
using namespace std;
#define gc() getchar()
il int rd(){
	int x=0,f=1;
	char ch=gc();
	while(!isdigit(ch)){if(ch=='-')f=-1;ch=gc();}
	while(isdigit(ch))x=(x<<1)+(x<<3)+(ch^48),ch=gc();
	return x*f;
}
const int N=1e6+10;
int n;
int a[N],b[N],va[N],vb[N];
int pos[N],len;
void Main(){
	n=rd();
	for(int i=1; i<=n; ++i)scanf("%1d",&a[i]);
	for(int i=1; i<=n; ++i)scanf("%1d",&b[i]);
	for(int i=1; i<=n; ++i)scanf("%1d",&va[i]);
	for(int i=1; i<=n; ++i)scanf("%1d",&vb[i]);
	for(int i=1; i<=n; ++i){
		if(!va[i])pos[++len]=i;
	}
	va[n+1]=vb[n+1]=0;
	pos[++len]=n+1;
	int nowa=1,nowb=1,ans=0,A1=0,A0=0,B0=0,B1=0,t=0;
	for(int i=1; i<=n; ++i){
		while(va[nowa]){
			if(a[nowa])++A1;else ++A0;
			++nowa;
		}
		while(vb[nowb]){
			if(b[nowb])++B1;else ++B0;
			++nowb;
		}
		if(!va[i]){
			A1=A0=0;nowa=i+1;
			if(a[i])++A1;else ++A0;
		}
		if(!vb[i]){
			B1=B0=0;nowb=i+1;
			if(b[i])++B1;else ++B0;
		}
//		cout<<i<<':'<<A0<<' '<<A1<<' '<<B0<<' '<<B1;
		if(A1&&B1){
			--A1,--B1;
			++ans;
		}else if(A0&&B0){
			--A0,--B0;
			++ans;
		}else{
			++t;
		}
//		cout<<":"<<ans<<endl;
		if(!vb[i])B0=B1=0;
		if(!va[i])A0=A1=0;
	}
	printf("%d\n",ans);
//	for(int i=1; i<=len; ++i){
//		int x=pos[i-1]+1,y=pos[i],zer=0,one=0;
//		for(int j=x; j<y; ++j){
//			if(a[j])++one;
//			else ++zer;
//		}
//		
//	}
}
int main(){
	freopen("edit.in","r",stdin);
	freopen("edit.out","w",stdout);
	int T=rd();
	while(T--)Main();
	
	return 0;
}
