过了大样例,rt
#include <bits/stdc++.h>
using namespace std;
const int NR = 1e5 + 5;
int n;
int s[2][NR];
bool flag[2][NR];
int cnt[2][NR][2], cur[2], id[2][NR];
void test(){
cin >> n;
for (int i = 0; i <= 1; i++){
for (int j = 1; j <= n; j++){
char ch; cin >> ch;
s[i][j] = ch - '0';
}
}
cur[0] = 0;
cur[1] = 0;
for (int i = 0; i <= 1; i++){
for (int j = 1; j <= n; j++){
char ch; cin >> ch;
flag[i][j] = (bool)(ch - '0');
if (flag[i][j] == 1){
int rt;
if (j == 1 || flag[i][j - 1] == 0){
rt = ++cur[i];
cnt[i][rt][0] = 0;
cnt[i][rt][1] = 0;
}
else{
rt = cur[i];
}
cnt[i][rt][s[i][j]]++;
id[i][j] = rt;
}
else{
id[i][j] = 0;
}
}
}
int ans = 0;
for (int i = 0; i <= 1; i++){
for (int j = 1; j <= n; j++){
if (flag[i][j] == 1 && flag[i ^ 1][j] == 0){
int k = id[i][j], to = s[i ^ 1][j];
if (cnt[i][k][to] > 0){
cnt[i][k][to]--;
ans++;
}
}
}
}
for (int i = 1; i <= n; i++){
if (flag[0][i] == 1 && flag[1][i] == 1){
int p = id[0][i], q = id[1][i];
if (cnt[0][p][0] > 0 && cnt[1][q][0] > 0){
ans++;
cnt[0][p][0]--;
cnt[1][q][0]--;
}
else if (cnt[0][p][1] > 0 && cnt[1][q][1] > 0){
ans++;
cnt[0][p][1]--;
cnt[1][q][1]--;
}
}
}
for (int i = 1; i <= n; i++){
if (flag[0][i] == 0 && flag[1][i] == 0){
if (s[0][i] == s[1][i]){
ans++;
}
}
}
cout << ans << endl;
}
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--){
test();
}
return 0;
}