#include <iostream>
using namespace std;
const int N=1e5+5;
int t,n;
char s1[N],s2[N],t1[N],t2[N];
int a[N],b[N];
int sc;
struct Sets{
	int zero,one;
}st[N<<1];

void init(char *s,char *t,int *arr){
	int cnt=0;
	t[n+1]='0';
	for(int i=1; i<=n+1; i++){
		if(t[i]=='1') cnt++;
		else{
			arr[i]=s[i]-'0';
			if(cnt<=1) arr[i-1]=s[i-1]-'0';
			else{
				sc++;
//				printf("i=%d,sc=%d,cnt=%d  ",i,sc,cnt);
				st[sc].one=st[sc].zero=0;
				for(int j=i-cnt; j<i; j++){
					arr[j]=sc;
					st[sc].one+=s[j]-'0';
//					putchar(s[j]);
				}
				st[sc].zero=cnt-st[sc].one;
//				printf("\none=%d,zero=%d\n",st[sc].one,st[sc].zero);
			}
			cnt=0;
		}
	}
//	puts("****------****\n\n");
}

int main(){
	freopen("edit.in","r",stdin);
	freopen("edit.out","w",stdout);
	scanf("%d",&t);
	while(t--){
		scanf("%d%s%s%s%s",&n,s1+1,s2+1,t1+1,t2+1);
		sc=1;
		init(s1,t1,a),init(s2,t2,b);
		int ans=0;
		// 0/1 set
		for(int i=1; i<=n; i++){
			if(a[i]<=1 && b[i]<=1) ans+=a[i]==b[i];
			else if(a[i]>=2 && b[i]<=1){
				Sets &s=st[a[i]];
				if(s.one && b[i]==1) s.one--,ans++;
				else if(s.zero && b[i]==0) s.zero--,ans++;
			}else if(a[i]<=1 && b[i]>=2){
				Sets &s=st[b[i]];
				if(s.one && a[i]==1) s.one--,ans++;
				else if(s.zero && a[i]==0) s.zero--,ans++;
//				printf("a,bSet  %d: 1cnt=%d,0cnt=%d,a[i]=%d",i,s.one,s.zero,a[i]);
//				if(s.one && a[i]==1) puts("**1**"),s.one--,ans++;
//				else if(s.zero && a[i]==0) puts("**0**"),s.zero--,ans++;
//				puts("");
			}
		}
		// Both Sets
		for(int i=1; i<=n; i++){
			if(a[i]<=1 || b[i]<=1) continue;
			Sets &s1=st[a[i]],&s2=st[b[i]];
//			printf("---i=%d---\n",i);
//			printf("s1: 0cnt=%d, 1cnt=%d\ns2: 0cnt=%d, 1cnt=%d\n---\n",s1.zero,s1.one,s2.zero,s2.one);
			if(s1.one && s2.one){
				s1.one--,s2.one--;
				ans++;
			}else if(s1.zero && s2.zero){
				s1.zero--,s2.zero--;
				ans++;
			}
		}
		printf("%d\n",ans);
		sc=0;
	}
	return 0;
}
