#include<bits/stdc++.h>
#define M(a) memset(a,0,sizeof a)
using namespace std;
const int N=1e5+5;
int T,n,oks[N],okt[N],ans,cnts[N][2],cntt[N][2],ts[N],tt[N];
int tos[N],tot[N],p,id[N],lass,lat,ids,idt;
char s[N],t[N],ps[N],pt[N];
void clr(){
	M(oks); M(okt); M(cnts); M(cntt); M(ts); M(tt);
	M(tos); M(tot); M(id);
	ans=p=ids=idt=0;
}
int main(){
	freopen("edit.in","r",stdin);
	freopen("edit.out","w",stdout);
	scanf("%d",&T);
	while(T--){
		scanf("%d%s%s%s%s",&n,s+1,t+1,ps+1,pt+1); clr();
		for(int i=1;i<=n;i++){
			if(ps[i]=='1'&&(ps[i-1]=='1'||ps[i+1]=='1')) oks[i]=1;
			if(pt[i]=='1'&&(pt[i-1]=='1'||pt[i+1]=='1')) okt[i]=1;
			if(!oks[i]&&!okt[i]) ans+=(s[i]==t[i]);
			else{
				if(oks[i]&&!oks[i-1]) ++ids; 
				if(okt[i]&&!okt[i-1]) ++idt; 
				tos[i]=idt,tot[i]=ids;
				ts[i]=ids,tt[i]=idt;
				if(oks[i]) cnts[ids][0]+=(s[i]=='0'),cnts[ids][1]+=(s[i]=='1'); 
				if(okt[i]) cntt[idt][0]+=(t[i]=='0'),cntt[idt][1]+=(t[i]=='1'); 
			}
		}
		for(int i=1;i<=n;i++){
			if(!oks[i]&&!okt[i]) continue;
			if(!oks[i]){
				if(cntt[tos[i]][s[i]-'0']) ++ans,--cntt[tos[i]][s[i]-'0'];
			}
			else if(!okt[i]){
				if(cnts[tot[i]][t[i]-'0']) ++ans,--cnts[tot[i]][t[i]-'0'];
			}
			else id[++p]=i;
		}
		for(int i=1;i<=p;i++){
			if(cnts[ts[id[i]]][0]&&cntt[tos[id[i]]][0]) ++ans,--cnts[ts[id[i]]][0],--cntt[tos[id[i]]][0];
			else if(cnts[ts[id[i]]][1]&&cntt[tos[id[i]]][1]) ++ans,--cnts[ts[id[i]]][1],--cntt[tos[id[i]]][1];
		}
		printf("%d\n",ans);
	}
	return 0;
} 
