#include using namespace std; const int N=1e5+10; int t,n; char s1[N],s2[N],t1[N],t2[N]; int sum1[N][2],sum2[N][2],l1[N],l2[N],r1[N],r2[N],tj1[N][2],tj2[N][2]; int main(){ freopen("edit.in","r",stdin); freopen("edit.out","w",stdout); scanf("%d",&t); while (t--){ int ans=0; memset (sum1,0,sizeof(sum1)); memset (sum2,0,sizeof(sum2)); memset (tj1,0,sizeof(tj1)); memset (tj2,0,sizeof(tj2)); memset (l1,0,sizeof(l1)); memset (r1,0,sizeof(l1)); memset (l2,0,sizeof(l2)); memset (r2,0,sizeof(r2)); memset (s1,0,sizeof(s1)); memset (s2,0,sizeof(s2)); memset (t1,0,sizeof(t1)); memset (t2,0,sizeof(t2)); scanf("%d",&n); scanf("%s",s1+1); scanf("%s",s2+1); scanf("%s",t1+1); scanf("%s",t2+1); t1[0]=t1[n+1]=t2[0]=t2[n+1]='0'; int cnt1=0,cnt2=0; for (int i=1;i<=n;i++){ sum1[i][0]=sum1[i-1][0],sum1[i][1]=sum1[i-1][1]; sum2[i][0]=sum2[i-1][0],sum2[i][1]=sum2[i-1][1]; if (s1[i]=='1')sum1[i][1]++; else sum1[i][0]++; if (s2[i]=='1')sum2[i][1]++; else sum2[i][0]++; if (t1[i]=='1'){ if (t1[i-1]=='0')cnt1++,l1[cnt1]=i; if (t1[i+1]=='0')r1[cnt1]=i; } else { cnt1++; l1[cnt1]=r1[cnt1]=i; } if (t2[i]=='1'){ if (t2[i-1]=='0')cnt2++,l2[cnt2]=i; if (t2[i+1]=='0')r2[cnt2]=i; } else { cnt2++; l2[cnt2]=r2[cnt2]=i; } } for (int i=1;i<=cnt1;i++){ tj1[i][0]=sum1[r1[i]][0]-sum1[l1[i]-1][0]; tj1[i][1]=sum1[r1[i]][1]-sum1[l1[i]-1][1]; } for (int i=1;i<=cnt2;i++){ tj2[i][0]=sum2[r2[i]][0]-sum2[l2[i]-1][0]; tj2[i][1]=sum2[r2[i]][1]-sum2[l2[i]-1][1]; } int i1=1,i2=1; while (i1<=cnt1&&i2<=cnt2){ if (l1[i1]>r2[i2]){ i2++; continue; } if (l2[i2]>r1[i1]){ i1++; continue; } int nm=min(r1[i1],r2[i2])-max(l1[i1],l2[i2])+1; int m1=min(tj1[i1][1],tj2[i2][1]),m0=min(tj1[i1][0],tj2[i2][0]); if (m1+m0<=nm){ ans+=m1+m0; tj1[i1][1]-=m1,tj1[i1][0]-=m0; tj2[i2][1]-=m1,tj2[i2][0]-=m0; } else{ ans+=nm; if (m1>=nm){ tj1[i1][1]-=nm; tj2[i2][1]-=nm; } else { nm-=m1; tj1[i1][1]-=m1; tj2[i2][1]-=m1; tj1[i1][0]-=nm; tj2[i2][0]-=nm; } } if (r2[i2]>r1[i1]){ i1++; continue; } else { i2++; continue; } } cout<