#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>

const int MAXN=1e5+10;
using namespace std;
int T,n;
bool flag[MAXN];
int z1,z2,o1,o2,sz,ans,Fixed;
string s1,s2,t1,t2;

int main(){
	freopen("edit.in","r",stdin);
	freopen("edit.out","w",stdout);
	scanf("%d",&T);
	
	while(T--){
		scanf("%d",&n);
		cin>>s1>>s2>>t1>>t2;
		
		memset(flag,0,sizeof(flag));
		o1=o2=z1=z2=0;
		Fixed=0;
		ans=0;
		sz=n;
		for(int i=0;i<n;i++){
				if( (s1[i]-'0') ) o1++;
				else z1++;
				if( (s2[i]-'0') ) o2++;
				else z2++;
		}
//		printf("%d %d %d %d\n",z1,z2,o1,o2);
		o1=o2=z1=z2=0;
		
		for(int i=0;i<n;i++){
			if(t1[i]-'0'){
				if( (s1[i]-'0') ) o1++;
				else z1++;
			}
			if(t2[i]-'0'){
				if( (s2[i]-'0') ) o2++;
				else z2++;
			}
		}
//		printf("%d %d %d %d\n",z1,z2,o1,o2);
	
		for(int i=0;i<n;i++){
			if( !(t1[i]-'0') ){
				if( !(t2[i]-'0') ){
					if(s1[i]==s2[i]) Fixed++;
					flag[i]=true;
//					printf("*%d ",i);
					continue;
				}
				if(s1[i]-'0'){
					if(o2) o2--,sz--,Fixed++;
					flag[i]=true;
				}else{
					if(z2) z2--,sz--,Fixed++;
					flag[i]=true;
				}
			}
		}
		
		for(int i=0;i<n;i++){
			if(flag[i]) continue;
			if( !(t2[i]-'0') ){
				if(s2[i]-'0'){
					if(o1) o1--,sz--,Fixed++;
					flag[i]=true;
				}else{
					if(z1) z1--,sz--,Fixed++;
					flag[i]=true;
				}
			}
		}
		
//		printf("\n%d %d %d %d fix%d\n",z1,z2,o1,o2,Fixed);
		int temp=min(o1,o2)+min(z1,z2);
		ans=min(temp,sz)+Fixed;
		printf("%d\n",ans);
	}
	
	fclose(stdin);
	fclose(stdout);
	return 0;
} 
