#include<bits/stdc++.h>
using namespace std;

#define int long long
#define siz(x) ((int)(x).size()) 
#define me(x,v) memset(x,v,sizeof(x))
#define L(i,l,r) for(int i=(l);i<=(r);i++)
#define R(i,r,l) for(int i=(r);i>=(l);i--)
#define ve(x) vector<x>
#define pa(x,y) pair<x,y>
#define x first
#define y second

char gc(){
	return getchar();
}
void pc(char c){
	putchar(c);
}
void el(){
	pc('\n');
}
void spc(){
	pc(' ');
}
int qread(){
	int res=0;
	bool sgn=0;
	char c=gc();
	while(c<'0'||c>'9'){
		sgn|=(c=='-');
		c=gc();
	}
	while(c>='0'&&c<='9'){
		res=res*10+c-'0';
		c=gc();
	}
	return sgn?-res:res;
}

constexpr int N=114514;

struct S{
	int fa[N];
	void init(int x){
		L(i,1,x){
			fa[i]=i;
		}
	}
	int find(int x){
		if(fa[x]==x){
			return x;
		}else{
			return fa[x]=find(fa[x]);
		}
	}
	void join(int x,int y){
		int fx=find(x),fy=find(y);
		if(fx!=fy){
			fa[fx]=fy;
		}
	}
};

S as,bs;

int n;
char a[N],b[N],ta[N],tb[N];

int ca[N][2],cb[N][2];

//int au,bu;
signed main(){
	freopen("edit.in","r",stdin);
	freopen("edit.out","w",stdout); 
	
	int T=qread();
	while(T--){
		me(ca,0);
		me(cb,0);
		
		n=qread();
		
		as.init(n),bs.init(n);
		
		scanf("%s",a+1);
		scanf("%s",b+1);
		scanf("%s",ta+1);
		scanf("%s",tb+1);
		
		int ans=0;
		L(i,1,n-1){
			if(ta[i+1]==ta[i]&&ta[i]=='1'){
				as.join(i,i+1);
			}
			if(tb[i]==tb[i+1]&&tb[i]=='1'){
				bs.join(i,i+1);
			}
		}
//		printf("a ");
//		L(i,1,n){
//			printf("%lld ",as.find(i));
//		}
//		el();
//		printf("b ");
//		L(i,1,n){
//			printf("%lld ",bs.find(i));
//		}
//		el();
		L(i,1,n){
			ca[as.find(i)][a[i]-'0']++;
			cb[bs.find(i)][b[i]-'0']++;
		}
		
//		printf("a ");
//		L(i,1,n){
//			if(as.fa[i]==i){
//				printf("%lld->(%lld,%lld) ",i,ca[i][0],ca[i][1]);
//			}
//		}
//		el();
//		printf("b ");
//		L(i,1,n){
//			if(bs.fa[i]==i){
//				printf("%lld->(%lld,%lld) ",i,cb[i][0],cb[i][1]);
//			}
//		}
//		el();
		
		L(i,1,n){
			int af=as.find(i),bf=bs.find(i);
			L(v,0,1){
				if(ca[af][v]>0&&cb[bf][v]>0){
					ans++;
					ca[af][v]--,cb[bf][v]--;
//					printf("at %lld bet %lld and %lld ans++\n",i,af,bf);
//					printf("%lld->(%lld,%lld)\n",af,ca[af][0],ca[af][1]);
//					printf("%lld->(%lld,%lld)\n",bf,ca[bf][0],ca[bf][1]);
				}
			}
		}
		printf("%lld\n",ans);
	}
	return 0;
} 
