#include<bits/stdc++.h>
using namespace std;
const int N=1e5+7;
int len;
char ss1[N],ss2[N],tt1[N],tt2[N];
int mx;
void dfs(int dep){
	if(dep==len){
		int ans=0;
		for(int i=0;i<=len-1;i++){
			if(ss1[i]==ss2[i])ans++;
		}
		mx=max(mx,ans);
		return;
	}
	if(tt1[dep]==0||tt1[dep-1]==0)dfs(dep+1);
	else{
		dfs(dep+1);
		swap(ss1[dep],ss1[dep+1]);
		dfs(dep+1);
	}
	return;
}
int main(){
	freopen("edit.in","r",stdin);
	freopen("edit.out","w",stdout);
	//记得取消注释！
	int T;
	scanf("%d",&T);
	for(int t=1;t<=T;t++){
		scanf("%d",&len);
		scanf("%s",ss1);
		scanf("%s",ss2);
		scanf("%s",tt1);
		scanf("%s",tt2);
		if(len<=10){
			mx=0;
			dfs(1);
			printf("%d\n",mx);
		}
		else{
			bool flag1=0;//s1有0 
			bool flag2=0;//s1有1 
			for(int i=0;i<=len-1;i++){
				if(ss1[i]-'0'==0)flag1=1;
				if(ss1[i]-'0'==1)flag2=1;
				if(flag1==1&&flag2==1)break;
			}
			if(flag1==0||flag2==0){
				//特殊性质A
				//预期pts 20
				int ans=0;
				int id=ss1[0]-'0';
				for(int i=0;i<=len-1;i++){
					//遍历s2
					if(ss2[i]-'0'==id)ans++;
				}
				printf("%d\n",ans);
			}
			else{
				bool flag=1;
				for(int i=0;i<=len-1;i++){
					if(tt1[i]!=tt2[i]){
						flag=0;
						break;
					}
				}
				if(flag==1){
					//特殊性质B 
					int ans=0;
					int tot11=0,tot12=0,tot21=0,tot22=0;
					//11：s1的0的数量 22：s2的1的数量 
					for(int i=0;i<=len-1;i++){
						if(tt1[i]-'0'==0){
							ans+=min(tot11,tot21)+min(tot12,tot22);
							tot11=0;
							tot12=0;
							tot21=0;
							tot22=0;
							if(ss1[i]==ss2[i])ans++;
						}
						else{
							if(ss1[i]-'0'==0)tot11++;
							else tot12++;
							if(ss2[i]-'0'==0)tot21++;
							else tot22++;
						}
					}
					ans+=min(tot11,tot21)+min(tot12,tot22);
					printf("%d\n",ans);
				}
				else{
					int tot1=0;
					int id1=-1;
					int tot2=0;
					int id2=-1;
					for(int i=0;i<=len-1;i++){
						if(tt1[i]-'0'==0){
							tot1++;
							id1=i;
						}
						if(tt2[i]-'0'==0){
							tot2++;
							id2=i;
						}
					}
					if(tot1==1&&tot2==1){
						//特殊性质C
						if(id1>id2){
							swap(ss1,ss2);
							swap(tt1,tt2);
							swap(id1,id2);
						}
						int ans=0;
						int tot11=0,tot12=0,tot21=0,tot22=0;
						for(int i=0;i<=id1;i++){
							if(ss1[i]-'0'==0)tot11++;
							else tot12++;
						}
						for(int i=0;i<=id2-1;i++){
							if(ss2[i]-'0'==0)tot21++;
							else tot22++;
						}
						ans+=min(tot11,tot21)+min(tot12,tot22);
						if(tot21>=tot11){
							tot21-=tot11;
							if(tot22>=tot12)tot22-=tot12;
							else{
								int k=tot12-tot22;
								tot22=0;
								tot21-=k;
							}
						}
						else{
							int k=tot11-tot21;
							tot21=0;
							tot22-=tot12+k;
						}
						tot11=tot12=0;
						for(int i=id1+1;i<=len-1;i++){
							if(ss1[i]-'0'==0)tot11++;
							else tot12++;
						}
						for(int i=id2;i<=len-1;i++){
							if(ss2[i]-'0'==0)tot21++;
							else tot22++;
						}
						ans+=min(tot11,tot21)+min(tot12,tot22);
						printf("%d\n",ans);
					}
				}
			} 
		}
	}
	return 0;
}
