/*
随手塞一题写一下
现在是 12:45，比赛即将结束
我现在是高二，已经很长一段时间没怎么搞oi了
今天虽然不是我的最佳水平，但对于一个实力已经生疏的人来说已经是正常的发挥了
估计这也是我最后一次的oi正式比赛了。省选要打两天，估计不会参加了。
第一次学oi是初一暑假，小学碰过一点，但聊胜于无
然后初二的时候csps炸掉，然后noip拿了个一等
初三的时候没信心，再加上疫情，摆了很多。那个时候也没有教练的大饼，挺可惜的
高一整个上学期都在很努力地冲，我的实力也是在那时候省选达到巅峰
可是初三不停课，就高一半年，又怎么行呢？
然后看到下一届的情况，就干脆回去文化课。但是又在文化课和oi间徘徊
最后还是选择了文化课
然后自己锻炼5年的实力，在当下低龄化的趋势下， 随便初中生都超过我了
虽然说自己的oi不完美，但至少挺精彩的
而且如果没有oi。我的整个三观和文化课估计也会不一样
很幸运能学习oi
5年的陪伴，终究要告别，但我会永远铭记 
*/ 
#include<bits/stdc++.h>
using namespace std;
//#define int long long
inline int read() {
	int x = 0, f = 1;
	char ch = getchar();
	while(ch < '0' || ch > '9') {
		if(ch == '-') f = -1;
		ch = getchar();
	}
	while(ch >= '0' && ch <= '9') {
		x = (x << 1) + (x << 3) + (ch ^ 48);
		ch = getchar();
	}
	return x * f;
}
#define pb push_back
#define fi first
#define se second
#define N 200010 
//#define M
//#define mo
int n, m, i, j, k, T; 
int f1[N], f2[N], ans, c1[N][2], c2[N][2]; 
char s1[N], s2[N], t1[N], t2[N]; 

int fa1(int x) {
	if(f1[x] == x) return x; 
	return f1[x] = fa1(f1[x]); 
}

int fa2(int x) {
	if(f2[x] == x) return x; 
	return f2[x] = fa2(f2[x]); 
}

signed main() {
//	srand(time(0));
	freopen("edit.in", "r", stdin);
	freopen("edit.out", "w", stdout);
	T = read(); 
	while(T--) {
		n = read(); ans = 0; 
		scanf("%s", s1 + 1); scanf("%s", s2 + 1); 
		scanf("%s", t1 + 1); scanf("%s", t2 + 1); 
		for(i = 1; i <= n; ++i) f1[i] = i, c1[i][0] = c1[i][1] = 0; 
		for(i = 1; i <= n; ++i) f2[i] = i, c2[i][0] = c2[i][1] = 0; 
		for(i = 1; i < n; ++i) if(t1[i] == '1' && t1[i + 1] == '1') f1[i] = i + 1; 
		for(i = 1; i < n; ++i) if(t2[i] == '1' && t2[i + 1] == '1') f2[i] = i + 1; 
		for(i = 1; i <= n; ++i) if(t1[i] == '1') c1[fa1(i)][s1[i] - '0']++; 
		for(i = 1; i <= n; ++i) if(t2[i] == '1') c2[fa2(i)][s2[i] - '0']++; 
//		for(i = 1; i <= n; ++i) printf("%d ", fa1(i)); printf("\n"); 
//		for(i = 1; i <= n; ++i) printf("%d ", fa2(i)); printf("\n"); 
		for(i = 1; i <= n; ++i) {
			if(t1[i] == '0' && t2[i] == '0') { ans += (s1[i] == s2[i]); continue; }
			if(t1[i] == '0' && t2[i] == '1') {
				int &k = c2[fa2(i)][s1[i] - '0']; 
				if(k > 0) ans++, k--; 
			}
			if(t1[i] == '1' && t2[i] == '0') {
				int &k = c1[fa1(i)][s2[i] - '0']; 
				if(k > 0) ans++, k--; 
			}
		}
//		printf("%lld\n", ans); 
		for(i = 1; i <= n; ++i) 
			if(t1[i] == '1' && t2[i] == '1') {
				if(c1[fa1(i)][0] && c2[fa2(i)][0]) 
					++ans, --c1[fa1(i)][0], --c2[fa2(i)][0]; 
				else if(c1[fa1(i)][1] && c2[fa2(i)][1]) 
					++ans, --c1[fa1(i)][1], --c2[fa2(i)][1]; 
			}
		printf("%d\n", ans); 
	}
	return 0;
}
