#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
char s1[N],s2[N],t1[N],t2[N];
int n,ans,qd1,qd2,num0[5][N],num1[5][N];
void dfs2(int k,int qd);
void dfs1(int k,int qd){
	if (k==n){
		dfs2(1,1);
		return;
	}
	if (t1[k]=='0'){
		dfs1(k+1,qd+1);
		return;
	}
	if (num0[1][qd]!=0){
		num0[1][qd]--,s1[k]='0';
		dfs1(k+1,qd);
		num0[1][qd]++;
	}
	if (num1[1][qd]!=0){
		num1[1][qd]--,s1[k]='1';
		dfs1(k+1,qd);
		num1[1][qd]++;
	}
	return;
}
void dfs2(int k,int qd){
	if (k==n){
		int tot=0;
		for (int i=0;i<n;i++)
			if (s1[i]==s2[i])  tot++;
		ans=max(ans,tot);
		return;
	}
	if (t2[k]=='0'){
		dfs2(k+1,qd+1);
		return;
	}
	if (num0[2][qd]!=0){
		num0[2][qd]--,s2[k]='0';
		dfs2(k+1,qd);
		num0[2][qd]++;
	}
	if (num1[2][qd]!=0){
		num1[2][qd]--,s2[k]='1';
		dfs2(k+1,qd);
		num1[2][qd]++;
	}
	return;
}
void work(){
	memset(num0,0,sizeof(num0));
	memset(num1,0,sizeof(num1));
	ans=0,qd1=qd2=1;
	bool spea=1;
	scanf("%d %s %s %s %s",&n,s1,s2,t1,t2);
	for (int i=0;i<n;i++)
		if (s1[i]!=s1[0])  spea=0;
	if (spea){
		for (int i=0;i<n;i++)
			if (s2[i]==s1[i])  ans++;
		printf("%d\n",ans);
		return;
	}
	if (strcmp(t1,t2)==0){//speb
		int n0=0,n1=0,m0=0,m1=0;
		for (int i=0;i<n;i++){
			if (t1[i]!='0'){
				if (s1[i]=='0')  n0++;
				else  n1++;
				if (s2[i]=='0')  m0++;
				else  m1++;
			}
			else{
				ans+=min(n0,m0)+min(n1,m1);
				n0=n1=m0=m1=0;
				if (s1[i]==s2[i])  ans++;
			}
		}
		ans+=min(n0,m0)+min(n1,m1);
		printf("%d\n",ans);
	}
	for (int i=0;i<n;i++){
		if (t1[i]=='0')  {qd1++;continue;}
		if (s1[i]=='0')  num0[1][qd1]++;
		else  num1[1][qd1]++;
	}
	for (int i=0;i<n;i++){
		if (t2[i]=='0')  {qd2++;continue;}
		if (s2[i]=='0')  num0[2][qd2]++;
		else  num1[2][qd2]++;
	}
	dfs1(0,1);
	printf("%d\n",ans);
	return;
}
int main(){
	freopen("edit.in","r",stdin);
	freopen("edit.out","w",stdout);
	int t;
	scanf("%d",&t);
	while (t--)  work();
	return 0;
}/*
越坠落 巨大沉默 难解的困惑
越挣脱 回忆的脆弱
自由走向我 伴随着风花的抚摸
一定会有 那天吧
请回答 回答 
*/
