#include<bits/stdc++.h>
using std::cin;using std::cout;using std::cerr;using std::ios;using std::endl;
const int N = 1e5+1000;
int n;
char s[2][N],c[2][N];
int fa[2][N],blk[2][N],wht[2][N];
int Find(int k,int x)
{
if(x<=0) cerr<<k<<x<<'\n';
return fa[k][x]==x ? x : fa[k][x]=Find(k,fa[k][x]);
}
void Union(int k,int x,int y)
{
x=Find(k,x);
y=Find(k,y);
if(x==y) return ;
fa[k][y]=x;
}
void Clear()
{
memset(s,0,sizeof(s));
memset(c,0,sizeof(c));
memset(blk,0,sizeof(blk));
memset(wht,0,sizeof(wht));
for(int i=1;i<=n;i++) fa[0][i]=fa[1][i]=i;
}
int main()
{
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
freopen("edit.in","r",stdin);
freopen("edit.out","w",stdout);
int T; cin>>T;
while(T--)
{
int ans=0;
cin>>n;
Clear();
cin>>(s[0]+1);
cin>>(s[1]+1);
cin>>(c[0]+1);
cin>>(c[1]+1);
for(int k=0;k<=1;k++)
{
for(int i=1;i<=n-1;i++)
{
if(c[k][i]=='1' && c[k][i+1]=='1') Union(k,i,i+1);
}
}
for(int k=0;k<=1;k++)
{
for(int i=1;i<=n;i++)
{
if(c[k][i]=='0') continue;
if(s[k][i]=='1') blk[k][Find(k,i)]++;
if(s[k][i]=='0') wht[k][Find(k,i)]++;
}
}
for(int i=1;i<=n;i++)
{
if(c[0][i]=='1' && c[1][i]=='1')
{
if(blk[0][Find(0,i)]>=1 && blk[1][Find(1,i)]>=1)
{
blk[0][Find(0,i)]--; blk[1][Find(1,i)]--;
ans++;
}
else if(wht[0][Find(0,i)]>=1 && wht[1][Find(1,i)]>=1)
{
wht[0][Find(0,i)]--; wht[1][Find(1,i)]--;
ans++;
}
}
else if(c[0][i]=='0' && c[1][i]=='0')
{
if(s[0][i]==s[1][i]) ans++;
}
else if(c[0][i]=='0')
{
if(s[0][i]=='1' && blk[1][Find(1,i)]>=1) ans++,blk[1][Find(1,i)]--;
if(s[0][i]=='0' && wht[1][Find(1,i)]>=1) ans++,wht[1][Find(1,i)]--;
}
else if(c[1][i]=='0')
{
if(s[1][i]=='1' && blk[0][Find(0,i)]>=1) ans++,blk[0][Find(0,i)]--;
if(s[1][i]=='0' && wht[0][Find(0,i)]>=1) ans++,wht[0][Find(0,i)]--;
}
}
cout<<ans<<'\n';
}
return 0;
}