#include <bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int t,n,g1[N][2],g2[N][2],gg1[N][2],gg2[N][2],nxt1[N],nxt2[N];
char s1[N],s2[N],ss1[N],ss2[N];
int main()
{
freopen("edit.in","r",stdin);
freopen("edit.out","w",stdout);
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>t;
while(t--)
{
cin>>n;
cin>>ss1>>ss2;
for(int i=1;i<=n;i++)
{
g1[i][1]=g1[i-1][1]+(ss1[i-1]=='1');
g2[i][1]=g2[i-1][1]+(ss2[i-1]=='1');
g1[i][0]=g1[i-1][0]+(ss1[i-1]=='0');
g2[i][0]=g2[i-1][0]+(ss2[i-1]=='0');
}
cin>>s1>>s2;
int las1=0,las2=0;
for(int i=1;i<=n;i++)
{
if(s1[i-1]=='0')
{
gg1[i][1]=g1[i-1][1]-g1[las1][1];
gg1[i][0]=g1[i-1][0]-g1[las1][0];
nxt1[las1]=i;
las1=i;
}
if(s2[i-1]=='0')
{
gg2[i][1]=g2[i-1][1]-g2[las2][1];
gg2[i][0]=g2[i-1][0]-g2[las2][0];
nxt2[las2]=i;
las2=i;
}
}
gg1[n+1][1]=g1[n][1]-g1[las1][1];gg1[n+1][0]=g1[n][0]-g1[las1][0];
gg2[n+1][1]=g2[n][1]-g2[las2][1];gg2[n+1][0]=g2[n][0]-g2[las2][0];
nxt1[las1]=nxt2[las2]=n+1;
int zhi1=nxt1[0],zhi2=nxt2[0],ans=0,jc=n;
while(zhi1!=n+1||zhi2!=n+1)
{
int ys=0,ls=0;
if(zhi1==zhi2)
{
ys=min(gg1[zhi1][1],gg2[zhi2][1]),ls=min(gg1[zhi1][0],gg2[zhi2][0]);
ans+=ys+ls+(ss1[zhi1-1]==ss2[zhi2-1]);
zhi1=nxt1[zhi1],zhi2=nxt2[zhi2];
jc=n;
}
else if(zhi1>zhi2)
{
if(ss2[zhi2-1]=='1')ys=min(gg1[zhi1][1],1),gg1[zhi1][1]-=ys;
else ls=min(gg1[zhi1][0],1),gg1[zhi1][0]-=ls;
ans+=ys+ls;
ys=min(gg1[zhi1][1],gg2[zhi2][1]),ls=min(gg1[zhi1][0],gg2[zhi2][0]);
if(ys+ls>jc)ys=min(ys,jc),ls=min(ls,jc-ys);
ans+=ys+ls;gg1[zhi1][1]-=ys;gg1[zhi1][0]-=ls;
jc=zhi1-zhi2-1;
zhi2=nxt2[zhi2];
}
else
{
if(ss1[zhi1-1]=='1')ys=min(gg2[zhi2][1],1),gg2[zhi2][1]-=ys;
else ls=min(gg2[zhi2][0],1),gg2[zhi2][0]-=ls;
ans+=ys+ls;
ys=min(gg1[zhi1][1],gg2[zhi2][1]),ls=min(gg1[zhi1][0],gg2[zhi2][0]);
if(ys+ls>jc)ys=min(ys,jc),ls=min(ls,jc-ys);
ans+=ys+ls;gg2[zhi2][1]-=ys;gg2[zhi2][0]-=ls;
jc=zhi2-zhi1-1;
zhi1=nxt1[zhi1];
}
}
ans+=min(gg1[zhi1][1],gg2[zhi2][1])+min(gg1[zhi1][0],gg2[zhi2][0]);
cout<<ans<<'\n';
}
return 0;
}