#include<bits/stdc++.h>
#define rep(i,a,n) for(int i=(a);i<=(n);++i)
#define per(i,a,n) for(int i=(n);i>=(a);--i)
#define SZ(x) ((int)(x.size()))

using namespace std;
typedef long long ll;
typedef pair<int,int> pii; 

const int maxn=1e5+10;

int res,n,idxs,idxt,cnts[2][maxn],cntt[2][maxn];
char s[maxn],t[maxn],opts[maxn],optt[maxn];
vector<array<int,3>> qs,qt;

inline void calc(int i,int j,int l,int r,int ql,int qr){
	int uni=min(qr,r)-max(l,ql)+1;
	if(uni<0) assert(0);
	int cnt0=min(cnts[0][i],cntt[0][j]);
	int cnt1=min(cnts[1][i],cntt[1][j]);
	res+=min(cnt0+cnt1,uni);
	if(cnt0>=uni){
		cnt0=uni; cnt1=0;
	}
	else{
		uni-=cnt0;
		cnt1=min(uni,cnt1);
	}
	cnts[0][i]-=cnt0; cnts[1][i]-=cnt1;
	cntt[0][j]-=cnt0; cntt[1][j]-=cnt1;
}

inline bool check(int i,int l,int r){
	int ql=qt[i][0],qr=qt[i][1];
	if(min(qr,r)-max(ql,l)+1>0) return true;
	return false;	
}

inline void solve(){
	cin>>n>>(s+1)>>(t+1)>>(opts+1)>>(optt+1);	
	int ls=0,rs=0,lt=0,rt=0;
	rep(i,1,n){
		if(opts[i]=='0' && optt[i]=='0'){
			res+=(s[i]==t[i]);
//			cout<<"all0="<<i<<"\n";
		}
		if(opts[i]=='1'){
			if(!ls){
				ls=i;	
				++idxs;
				cnts[0][idxs]=cnts[1][idxs]=0;
			}
			rs=i;
			++cnts[s[i]-'0'][idxs];
		}
		else{
			if(ls) qs.push_back({ls,rs,idxs});
			ls=rs=0;			
		}
		if(optt[i]=='1'){
			if(!lt){
				lt=i;	
				++idxt;
				cntt[0][idxt]=cntt[1][idxt]=0;
			}
			rt=i;
			++cntt[t[i]-'0'][idxt];
		}
		else{
			if(lt) qt.push_back({lt,rt,idxt});
			lt=rt=0;			
		}
	}
	if(ls) qs.push_back({ls,rs,idxs});
	if(lt) qt.push_back({lt,rt,idxt});
	for(auto x:qs){
		int l=x[0],r=x[1],id=x[2];
//		cout<<"s"<<l<<" "<<r<<" "<<id<<"\n";
		rep(i,l,r){
			if(optt[i]=='0'){
				int w=t[i]-'0';
				if(cnts[w][id]){
					cnts[w][id]--;
					res++;
				}
				else cnts[w^1][id]--;
			}
		}
	}
	for(auto x:qt){
		int l=x[0],r=x[1],id=x[2];
//		cout<<"t"<<l<<" "<<r<<" "<<id<<"\n";
		rep(i,l,r){
			if(opts[i]=='0'){
				int w=s[i]-'0';
				if(cntt[w][id]){
					cntt[w][id]--;
					res++;
				}
				else cntt[w^1][id]--;
			}
		}
	}
//	cout<<"fst="<<res<<"\n";
	int j=0;
	for(auto x:qs){
		int l=x[0],r=x[1],i=x[2];
		while(j+1<SZ(qt) && !check(j,l,r) && qt[j][0]<l) j++;
		if(SZ(qt) && check(j,l,r)) calc(i,qt[j][2],l,r,qt[j][0],qt[j][1]);
		while(j+1<SZ(qt) && check(j+1,l,r)){
			j++;
			calc(i,qt[j][2],l,r,qt[j][0],qt[j][1]);
		}
	}
	cout<<res<<"\n";
	qs.clear(); qt.clear();
	idxs=idxt=res=0;
}

signed main(){
	freopen("edit.in","r",stdin);
	freopen("edit.out","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	int _=1;
	cin>>_;
	while(_--) solve();
}
