#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
int T,n;
char s1[N],s2[N],t1[N],t2[N];
struct Seg{
int l,r;
int cnt0,cnt1;
Seg(){};
Seg(int _l,int _r,int _c0,int _c1){
l = _l,r = _r, cnt0 = _c0, cnt1 = _c1;
}
};
vector<Seg> s,t;
int main(){
freopen("edit.in","r",stdin);
freopen("edit.out","w",stdout);
ios::sync_with_stdio(false),cin.tie(0);
cin >> T;
while(T--){
s.clear(),t.clear();
cin >> n;
cin >> (s1+1) >> (s2+1) >> (t1+1) >> (t2+1);
int c0 = 0,c1 = 0,l = 1;
for(int i = 1; i <= n; ++ i){
c0 += s1[i] == '0';
c1 += s1[i] == '1';
int cc = (s1[i] == '0');
int cd = (s1[i] == '1');
if(t1[i] == '0'){
if(l != i){
s.push_back(Seg(l,i-1,c0 - cc, c1 - cd));
}
s.push_back(Seg(i,i,cc,cd));
c0 = c1 = 0; l = i+1;
}
}
if(l != n+1)s.push_back(Seg(l,n,c0,c1));
c0 = c1 = 0,l = 1;
for(int i = 1; i <= n; ++ i){
c0 += s2[i] == '0';
c1 += s2[i] == '1';
int cc = (s2[i] == '0');
int cd = (s2[i] == '1');
if(t2[i] == '0'){
if(l != i){
t.push_back(Seg(l,i-1,c0 - cc, c1 - cd));
}
t.push_back(Seg(i,i,cc,cd));
c0 = c1 = 0; l = i+1;
}
}
if(l != n+1)t.push_back(Seg(l,n,c0,c1));
int st = s.size(), tt = t.size();
int ans = 0;
for(int i = 0, j = 0; i < tt; ++ i){
while(j < st && s[j].r < t[i].l)++j;
while(j < st && s[j].l <= t[i].r && (t[i].cnt0 || t[i].cnt1)){
int c0 = min(s[j].cnt0,t[i].cnt0);
int c1 = min(s[j].cnt1,t[i].cnt1);
c0 = min(c0,t[i].r - s[j].l + 1);
c0 = min(c0,s[j].r - t[i].l + 1);
c1 = min(c1,t[i].r - s[j].l + 1);
c1 = min(c1,s[j].r - t[i].l + 1);
s[j].cnt0 -= c0;
t[i].cnt0 -= c0;
s[j].cnt1 -= c1;
t[i].cnt1 -= c1;
ans += c0 + c1;
++j;
}
--j;
}
cout << ans << "\n";
}
return 0;
}