//杉月
#include<bits/stdc++.h>
#define N 100005
using namespace std;
int t,n;
int s1[N],s2[N];
int st1[N],top1;
int st2[N],top2;
int tA=1,tB=1;
void read(){
char ss;
for(int i=1;i<=n;i++){
cin>>ss;
s1[i]=ss-'0';
if(i>1&&s1[i]!=s1[i-1]) tA=0;
}
for(int i=1;i<=n;i++){
cin>>ss;
s2[i]=ss-'0';
}
for(int i=1;i<=n;i++){
cin>>ss;
if(ss=='0'){
st1[++top1]=i;
}
}
for(int i=1;i<=n;i++){
cin>>ss;
if(ss=='0'){
st2[++top2]=i;
}
}
if(top1!=top2){
tB=0;
}else{
for(int i=1;i<=top1;i++){
if(st1[i]!=st2[i]) tB=0;
}
}
}
int solveA(){
int ans=0;
for(int i=1;i<=n;i++){
if(s1[i]==s2[i]) ans++;
}
return ans;
}
int solveB(){
int num1=0,num2=0,ans=0;
int j=1;
while(j<=top1){
for(int i=st1[j-1]+1;i<st1[j];i++){
if(s1[i]==1) num1++;
}
for(int i=st2[j-1]+1;i<st2[j];i++){
if(s2[i]==1) num2++;
}
if(s1[st1[j]]==s2[st2[j]]&&j<top1) ans++;
int ss1=(st1[j]-st1[j-1])-1-num1;
int ss2=(st2[j]-st2[j-1])-1-num2;
ans+=min(num1,num2)+min(ss1,ss2);
num1=0;num2=0;j++;
}
return ans;
}
int solve(){
int ans=0;
int num1=0,num2=0;
int i=1,j=1;
for(int i1=st1[i-1]+1;i1<st1[i];i1++){
if(s1[i1]==1) num1++;
}
for(int i1=st2[j-1]+1;i1<st2[j];i1++){
if(s2[i1]==1) num2++;
}
//cout<<num1<<" "<<num2<<endl;
while(i<=top1||j<=top2){
if(st1[i]==st2[j]){
//if(i==top1&&j==top2) break;
if(s1[st1[i]]==s2[st2[j]]&&i<top1&&j<top2) ans++;
num1=min(st1[i]-max(st1[i-1],st2[j-1])-1,num1);
num2=min(st2[j]-max(st1[i-1],st2[j-1])-1,num2);
int ss1=(st1[i]-max(st1[i-1],st2[j-1]))-1-num1;
int ss2=(st2[j]-max(st1[i-1],st2[j-1]))-1-num2;
ans+=min(num1,num2)+min(ss1,ss2);
num1=num2=0;i++;j++;
for(int i1=st2[j-1]+1;i1<st2[j];i1++){
if(s2[i1]==1) num2++;
}
for(int i1=st1[i-1]+1;i1<st1[i];i1++){
if(s1[i1]==1) num1++;
}
}else{
if(st1[i]>st2[j]){
if(s2[st2[j]]==1&&j<top2) num2++;
num1=min(st1[i]-max(st1[i-1],st2[j-1])-1,num1);
num2=min(st2[j]-max(st1[i-1],st2[j-1]),num2);
int ss1=(st1[i]-max(st1[i-1],st2[j-1]))-1-num1;
int ss2=(st2[j]-max(st1[i-1],st2[j-1]))-num2;
ans+=min(num1,num2)+min(ss1,ss2);
num1-=min(num1,num2);
num2=0;j++;
for(int i1=st2[j-1]+1;i1<st2[j];i1++){
if(s2[i1]==1) num2++;
}
}
else{
if(s1[st1[i]]==1&&i<top1) num1++;
num1=min(st1[i]-max(st1[i-1],st2[j-1]),num1);
num2=min(st2[j]-max(st1[i-1],st2[j-1])-1,num2);
int ss1=(st1[i]-max(st1[i-1],st2[j-1]))-num1;
int ss2=(st2[j]-max(st1[i-1],st2[j-1]))-1-num2;
ans+=min(num1,num2)+min(ss1,ss2);
num2-=min(num1,num2);
num1=0;i++;
for(int i1=st1[i-1]+1;i1<st1[i];i1++){
if(s1[i1]==1) num1++;
}
}
}
//cout<<ans<<endl;
}
return ans;
}
int main(){
//freopen("edit17.in","r",stdin);
//freopen("edit17.out","w",stdout);
ios::sync_with_stdio(0);
cin.tie();cout.tie();
cin>>t;
while(t--){
cin>>n;
top1=top2=0;
tA=1,tB=1;
read();
st1[++top1]=n+1;
st2[++top2]=n+1;
if(tA) {cout<<solveA()<<endl;continue;}
if(tB) {cout<<solveB()<<endl;continue;}
if(top1==1&&top2==1){
int uu1=0,uu2=0;
for(int i=1;i<=n;i++){
if(s1[i]==1) uu1++;
if(s2[i]==1) uu2++;
}
cout<<n-abs(uu1-uu2)<<endl;continue;}
cout<<solve()<<endl;
}
return 0;
}
solveA是解决性质A的solveB同理,大佬只用看solve函数就行了。