#include<bits/stdc++.h>
const long long N=100000;
using namespace std;
long long T,n,p[2*N+5],tot,sa[N+5],sb[N+5],nw,ans,lst;
long long smn,smx;
struct node{
    long long mn,mx;
}t[2*N+5];
char a[N+5],b[N+5],ta[N+5],tb[N+5];
void M(long long x){
    smn=min(t[sa[x]].mn,t[sb[x]].mn);
    smx=min(t[sa[x]].mx,t[sb[x]].mx);
    ans+=smn+smx;
    t[sa[x]].mn-=smn;
    t[sb[x]].mn-=smn;
    t[sa[x]].mx-=smx;
    t[sb[x]].mx-=smx;
}
void Init(){
    for(int i=1;i<=2*n+2;i++){
        t[i].mn=0;
        t[i].mx=0;
    }
    tot=0;
    ans=0;
    for(int i=1;i<=n+1;i++){
        sa[i]=0;
        sb[i]=0;
    }
}
int main(){
    // freopen("edit2.in","r",stdin);
    // freopen("edit.out","w",stdout);
    freopen("edit.in","r",stdin);
    freopen("edit.out","w",stdout);
    scanf("%lld",&T);
    while(T--){
        scanf("%lld",&n);
        // cout<<n<<":"<<endl;
        Init();
        scanf("%s",a+1);
        scanf("%s",b+1);
        scanf("%s",ta+1);
        scanf("%s",tb+1);
        nw=1;
        for(int i=1;i<=n;i++){
            if(ta[i]=='0'){
                nw++;
                p[++tot]=i;
            } 
            else sa[i]=nw;
        }
        nw++;
        for(int i=1;i<=n;i++){
            if(tb[i]=='0'){
                nw++;
                p[++tot]=i;
            } 
            else sb[i]=nw;
        }
        for(int i=1;i<=n;i++){
            if(sa[i]==0) continue;
            if(a[i]=='0') t[sa[i]].mn++;
            else t[sa[i]].mx++;
        }
        for(int i=1;i<=n;i++){
            if(sb[i]==0) continue;
            if(b[i]=='0') t[sb[i]].mn++;
            else t[sb[i]].mx++;
        }
        // for(int i=1;i<=n;i++) cout<<sa[i]<<' ';
        // cout<<endl;
        // for(int i=1;i<=n;i++) cout<<sb[i]<<' ';
        // cout<<endl;
        p[++tot]=n+1;
        sort(p+1,p+1+tot);
        tot=unique(p+1,p+1+tot)-p-1;
        // for(int i=1;i<=nw;i++){
        //     cout<<t[i].mn<<' '<<t[i].mx<<endl;
        // }
        // for(int i=1;i<=tot;i++) cout<<p[i]<<' ';
        // cout<<endl;
        // cout<<a[306]<<' '<<b[334]<<endl;
        lst=0;
        for(int i=1;i<=tot;i++){
            nw=p[i];
            if(sa[nw]==0&&sb[nw]==0){
                if(nw-1!=lst) M(nw-1);
                if(a[nw]==b[nw]&&nw!=n+1) ans++;
                continue;
            }
            if(sa[nw]==0){
                if(nw-1!=lst){
                    M(nw-1);
                    if(t[sa[nw-1]].mn!=0){
                        t[sb[nw-1]].mx-=t[sa[nw-1]].mn;
                    }
                    if(t[sa[nw-1]].mx!=0){
                        t[sb[nw-1]].mn-=t[sa[nw-1]].mx;
                    }
                } 
                if(a[nw]=='0'){
                    if(t[sb[nw]].mn>0){
                        t[sb[nw]].mn--;
                        ans++;
                    }
                    else t[sb[nw]].mx--;
                }
                else{
                    if(t[sb[nw]].mx>0){
                        t[sb[nw]].mx--;
                        ans++;
                    }
                    else t[sb[nw]].mn--;
                }
            }
            else{
                if(nw-1!=lst){
                    M(nw-1);
                    if(t[sb[nw-1]].mn!=0){
                        t[sa[nw-1]].mx-=t[sb[nw-1]].mn;
                    }
                    if(t[sb[nw-1]].mx!=0){
                        t[sa[nw-1]].mn-=t[sb[nw-1]].mx;
                    }
                }
                if(b[nw]=='0'){
                    if(t[sa[nw]].mn>0){
                        t[sa[nw]].mn--;
                        ans++;
                    }
                    else t[sa[nw]].mx--;
                }
                else{
                    if(t[sa[nw]].mx>0){
                        t[sa[nw]].mx--;
                        ans++;
                    }
                    else t[sa[nw]].mn--;
                }
            }
            lst=nw;
        }
        printf("%lld\n",ans);
    }
    return 0;
}