#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
int n,cs0[N],cs1[N],ct1[N],ct0[N];
string s,t,opts,optt;
struct qp{
	int l,r,cnt0,cnt1;
	bool lx;
};
vector<qp> ss,tt;
int main(){
	freopen("edit.in","r",stdin);
	freopen("edit.out","w",stdout);
//	ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);
	int T;
	cin>>T;
	while(T--){
		cin>>n;
		cin>>s>>t>>opts>>optt;
//		cs0[0]=s[0]=='0';cs1[0]=s[0]=='1';
//		ct0[0]=t[0]=='0';ct1[0]=t[0]=='1';
//		for(int i=1;i<n;i++)cs0[i]=cs0[i-1]+s[i]=='0',cs1[i]=cs1[i-1]+s[i]=='1';
//		for(int i=1;i<n;i++)ct0[i]=ct0[i-1]+t[i]=='0',ct1[i]=ct1[i-1]+t[i]=='1';
		int cnt0=0,cnt1=0,lst=0,ans=0;
		ss.clear(),tt.clear();
		for(int i=0;i<n;i++){
			if(i&&opts[i]!=opts[i-1])
				ss.push_back((qp){lst,i-1,cnt0,cnt1,opts[i-1]-'0'}),cnt0=0,cnt1=0,lst=i;
			cnt0+=s[i]=='0',cnt1+=s[i]=='1';
		}ss.push_back((qp){lst,n-1,cnt0,cnt1,opts[n-1]-'0'}),cnt0=0,cnt1=0,lst=0;
		for(int i=0;i<n;i++){
			if(i&&optt[i]!=optt[i-1])
				tt.push_back((qp){lst,i-1,cnt0,cnt1,optt[i-1]-'0'}),cnt0=0,cnt1=0,lst=i;
			cnt0+=t[i]=='0',cnt1+=t[i]=='1';
		}tt.push_back((qp){lst,n-1,cnt0,cnt1,optt[n-1]-'0'}),cnt0=0,cnt1=0,lst=0;
		int i=0,o=0;
		while(i<ss.size()-1||o<tt.size()-1){
//			cout<<i<<' '<<o<<' '<<ans<<endl;
//			cout<<ss[i].l<<' '<<ss[i].r<<' '<<tt[o].l<<' '<<tt[o].r<<endl;
//			cout<<ss[i].cnt0<<' '<<ss[i].cnt1<<' '<<tt[o].cnt0<<' '<<tt[o].cnt1<<endl;
			if(ss[i].r<tt[o].l){i++;continue;}
			if(ss[i].l>tt[o].r){o++;continue;}
			if(ss[i].lx&&tt[o].lx){
				if(ss[i].r<tt[o].r){
					int len=min(ss[i].r,tt[o].r)-max(ss[i].l,tt[o].l)+1;
					ans+=min(min(ss[i].cnt0,tt[o].cnt0),len)+min(min(ss[i].cnt1,tt[o].cnt1),len);
					tt[o].cnt0-=min(min(ss[i].cnt0,tt[o].cnt0),len);
					tt[o].cnt1-=min(min(ss[i].cnt1,tt[o].cnt1),len);
					i++;
				}else{
					int len=min(ss[i].r,tt[o].r)-max(ss[i].l,tt[o].l)+1;
					ans+=min(min(ss[i].cnt0,tt[o].cnt0),len)+min(min(ss[i].cnt1,tt[o].cnt1),len);
					ss[i].cnt0-=min(min(ss[i].cnt0,tt[o].cnt0),len);
					ss[i].cnt1-=min(min(ss[i].cnt1,tt[o].cnt1),len);
					o++;
				}
			}
			else if(!ss[i].lx&&!tt[o].lx){
				if(ss[i].r<tt[o].r){
					for(int u=max(ss[i].l,tt[o].l);u<=ss[i].r;u++)
						ans+=s[u]==t[u];
					i++;
				}else{
					for(int u=max(ss[i].l,tt[o].l);u<=tt[o].r;u++)
						ans+=s[u]==t[u];
					o++;
				}	
			}
			else if(ss[i].lx){
				for(int u=max(ss[i].l,tt[o].l);u<=min(tt[o].r,ss[i].r);u++)
					if(t[u]=='0')
						if(ss[i].cnt0)ss[i].cnt0--,ans++;
						else ss[i].cnt1--;
					else if(ss[i].cnt1)ss[i].cnt1--,ans++;
						else ss[i].cnt0--;
				if(ss[i].r<tt[o].r)i++;
				else o++;
			}
			else if(tt[o].lx){
				for(int u=max(ss[i].l,tt[o].l);u<=min(tt[o].r,ss[i].r);u++)
					if(s[u]=='0')
						if(tt[o].cnt0)tt[o].cnt0--,ans++;
						else tt[o].cnt1--;
					else if(tt[o].cnt1)tt[o].cnt1--,ans++;
						else tt[o].cnt0--;
				if(ss[i].r<tt[o].r)i++;
				else o++;
			}
		}
//			cout<<i<<' '<<o<<' '<<ans<<endl;
//			cout<<ss[i].l<<' '<<ss[i].r<<' '<<tt[o].l<<' '<<tt[o].r<<endl;
//			cout<<ss[i].cnt0<<' '<<ss[i].cnt1<<' '<<tt[o].cnt0<<' '<<tt[o].cnt1<<endl;
		if(ss[i].lx&&tt[o].lx){
			if(ss[i].r<tt[o].r){
					int len=min(ss[i].r,tt[o].r)-max(ss[i].l,tt[o].l)+1;
					ans+=min(min(ss[i].cnt0,tt[o].cnt0),len)+min(min(ss[i].cnt1,tt[o].cnt1),len);
				tt[o].cnt0-=min(min(ss[i].cnt0,tt[o].cnt0),len);
				tt[o].cnt1-=min(min(ss[i].cnt1,tt[o].cnt1),len);
				i++;
			}else{
					int len=min(ss[i].r,tt[o].r)-max(ss[i].l,tt[o].l)+1;
					ans+=min(min(ss[i].cnt0,tt[o].cnt0),len)+min(min(ss[i].cnt1,tt[o].cnt1),len);
				ss[i].cnt0-=min(min(ss[i].cnt0,tt[o].cnt0),len);
				ss[i].cnt1-=min(min(ss[i].cnt1,tt[o].cnt1),len);
				o++;
			}
		}
		else if(!ss[i].lx&&!tt[o].lx){
			if(ss[i].r<tt[o].r){
				for(int u=max(ss[i].l,tt[o].l);u<=ss[i].r;u++)
					ans+=s[u]==t[u];
				i++;
			}else{
				for(int u=max(ss[i].l,tt[o].l);u<=tt[o].r;u++)
					ans+=s[u]==t[u];
				o++;
			}	
		}
		else if(ss[i].lx){
			for(int u=max(ss[i].l,tt[o].l);u<=min(tt[o].r,ss[i].r);u++)
				if(t[u]=='0')
					if(ss[i].cnt0)ss[i].cnt0--,ans++;
					else ss[i].cnt1--;
				else if(ss[i].cnt1)ss[i].cnt1--,ans++;
					else ss[i].cnt0--;
			if(ss[i].r<tt[o].r)i++;
			else o++;
		}
		else if(tt[o].lx){
			for(int u=max(ss[i].l,tt[o].l);u<=min(tt[o].r,ss[i].r);u++)
				if(s[u]=='0')
					if(tt[o].cnt0)tt[o].cnt0--,ans++;
					else tt[o].cnt1--;
				else if(tt[o].cnt1)tt[o].cnt1--,ans++;
					else tt[o].cnt0--;
			if(ss[i].r<tt[o].r)i++;
			else o++;
		}
		cout<<ans<<endl;
	}
	
	return 0;
} 
