#include #define rd read() #define pb emplace_back #define mkp make_pair #define Endl putchar('\n') using namespace std; typedef long long ll; using pii=pair; int read(){ int s=0,f=1;char c=getchar(); while(!isdigit(c)){if(c=='-')f=-1;c=getchar();} while(isdigit(c)){s=(s<<1)+(s<<3)+c-'0';c=getchar();} return s*f; } void write(int x){ static int St[20],Top=0; if(!x){putchar('0');return ;} if(x<0){putchar('-');x=-x;} while(x){St[++Top]=x%10;x/=10;} while(Top){putchar(St[Top--]^'0');} } char readc(){ char c=getchar(); while(c==' '||c=='\n'||c=='\r'||c==EOF)c=getchar(); return c; } const int N=1e5+10; int n,a[N],b[N],s[N],t[N]; int p[N],num1[N][2],m1,q[N],num2[N][2],m2; void solve(){ n=rd; for(int i=1;i<=n;i++)a[i]=readc()-'0'; for(int i=1;i<=n;i++)b[i]=readc()-'0'; for(int i=1;i<=n;i++)s[i]=readc()-'0'; for(int i=1;i<=n;i++)t[i]=readc()-'0'; for(int i=1;i<=n;i++)num1[i][0]=num1[i][1]=num2[i][0]=num2[i][1]=0; m1=1,m2=1; for(int i=1;i<=n;i++){ if(s[i]){ num1[m1][a[i]]++; p[i]=m1; } else{ p[i]=-1; m1++; } } int cnt=0; for(int i=1;i<=n;i++){ if(t[i]){ num2[m2][b[i]]++; q[i]=m2; } else{ q[i]=-1; m2++; } } int ans=0; for(int i=1;i<=n;i++){ if(~p[i]&&~q[i]){ if(num1[p[i]][0]&&num2[q[i]][0]){ num1[p[i]][0]--,num2[q[i]][0]--; ans++; } else if(num1[p[i]][1]&&num2[q[i]][1]){ num1[p[i]][1]--,num2[q[i]][1]--; ans++; } } else if(~q[i]){ if(num2[q[i]][a[i]]){ num2[q[i]][a[i]]--; ans++; } } else if(~p[i]){ if(num1[p[i]][b[i]]){ num1[p[i]][b[i]]--; ans++; } } else{ if(a[i]==b[i])ans++; } } write(ans),Endl; } int main(){ freopen("edit.in","r",stdin); freopen("edit.out","w",stdout); int T=1; T=read(); while(T--){ solve(); } return 0; }