#include<bits/stdc++.h>
using namespace std;
const int MAXN=100005;
int T,n;
bool s1[MAXN],s2[MAXN],t1[MAXN],t2[MAXN];
bool f1[MAXN],f2[MAXN];
vector<int>tl1,tl2;
vector<pair<int,int> >oz1,oz2;
string s;
int ans;
int main(){
	freopen("edit.in","r",stdin);
	freopen("edit.out","w",stdout);
	scanf("%d",&T);
	while(T--){
		memset(f1,0,sizeof f1);
		memset(f2,0,sizeof f2);
		tl1.clear();
		tl2.clear();
		oz1.clear();
		oz2.clear();
		ans=0;
		scanf("%d",&n);
		cin >> s;
		for(int i=0;i<n;i++){
			s1[i+1]=s[i]-'0';
		}
		cin >> s;
		for(int i=0;i<n;i++){
			s2[i+1]=s[i]-'0';
		}
		cin >> s;
		for(int i=0;i<n;i++){
			t1[i+1]=s[i]-'0';
			if(!t1[i+1]){
				tl1.push_back(i+1);
				f1[i+1]=s1[i+1];
			}
		}
		cin >> s;
		for(int i=0;i<n;i++){
			t2[i+1]=s[i]-'0';
			if(!t2[i+1]){
				tl2.push_back(i+1);
				f2[i+1]=s2[i+1];
			}
		}
		tl1.push_back(n+1);
		tl2.push_back(n+1);
		int o=0,z=0,l=1,r=0;
		for(int i:tl1){
			r=i;
			for(int j=l;j<r;j++){
				o+=s1[j];
				z+=!s1[j];
			}
			oz1.push_back({o,z});
			o=z=0;
			l=r+1;
		}
		l=1,r=0,o=0,z=0;
		for(int i:tl2){
			r=i;
			for(int j=l;j<r;j++){
				o+=s2[j];
				z+=!s2[j];
			}
			oz2.push_back({o,z});
			o=z=0;
			l=r+1;
		}
//		int filled1=0,filled2=0;
		int pace1=0,pace2=0;
//		while(filled1<n&&filled2<n){
//			while(filled1<filled2){
//				if(pace1)
//			}
//			if(filled1==filled2){
//				
//			}
//			while(filled1>filled2){
//				
//			}
//		}
		for(int i=1;i<=n;i++){
//			printf("\n");
//			for(int i=1;i<=n;i++){
//				printf("%d",f1[i]);
//			}
//			printf("\n");
//			for(int i=1;i<=n;i++){
//				printf("%d",f2[i]);
//			}
//			printf("\n");
//			printf("\n");
			if(oz1[pace1].first==0&&oz1[pace1].second==0){
				pace1++;
			}
			if(oz2[pace2].first==0&&oz2[pace2].second==0){
				pace2++;
			}
			if(!t1[i]&&!t2[i]){
				if(s1[i]==s2[i])ans++;
				continue;
			}
			if(!t1[i]){
				if(!s1[i]){
					if(!oz2[pace2].second){
						oz2[pace2].first--;
						f2[i]=1;
						continue;
					}
					else{
						oz2[pace2].second--;
						f2[i]=0;
						ans++;
						continue;
					}
				}else{
					if(!oz2[pace2].first){
						oz2[pace2].second--;
						f2[i]=0;
						continue;
					}
					else{
						oz2[pace2].first--;
						f2[i]=1;
						ans++;
						continue;
					}
				}
			}
			if(!t2[i]){
				if(!s2[i]){
					if(!oz1[pace1].second){
						oz1[pace1].first--;
						f1[i]=1;
						continue;
					}
					else{
						oz1[pace1].second--;
						f1[i]=0;
						ans++;
						continue;
					}
				}else{
					if(!oz1[pace1].first){
						oz1[pace1].second--;
						f1[i]=0;
						continue;
					}
					else{
						oz1[pace1].first--;
						f1[i]=1;
						ans++;
						continue;
					}
				}
			}
			if(!oz1[pace1].first){
				if(!oz2[pace2].second){
					oz1[pace1].second--;
					oz2[pace2].first--;
					f1[i]=0;
					f2[i]=1;
					continue;
				}
				else{
					oz1[pace1].second--;
					oz2[pace2].second--;
					f1[i]=0;
					f2[i]=0;
					ans++;
					continue;
				}
			}
			else{
				if(!oz2[pace2].first){
					oz1[pace1].first--;
					oz2[pace2].second--;
					f1[i]=1;
					f2[i]=0;
					continue;
				}
				else{
					oz1[pace1].first--;
					oz2[pace2].first--;
					f1[i]=1;
					f2[i]=1;
					ans++;
					continue;
				}
			}
		}
		printf("%d\n",ans);
	}
	return 0;
}

