#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
int T;
string s1,s2;
int n;
bool f1[maxn],f2[maxn];
int bl1[maxn],bl2[maxn];
int num1,num2;
void solveA()
{
int ans=0;
for(int i=0;i<n;i++)
{
if(s2[i]==s1[i])
{
ans++;
}
}
cout<<ans<<endl;
return ;
}
void solveB()
{
int ans=0;
int cnt[5][5]={0};
for(int i=0;i<n;i++)
{
if(f1[i]==0)
{
ans+=(s1[i]==s2[i]? 1:0);
cnt[1][0]=0;
cnt[1][1]=0;
cnt[2][0]=0;
cnt[2][1]=0;
continue;
}
if(i==0||f1[i-1]==0)
{
cnt[1][0]=0;
cnt[1][1]=0;
cnt[2][0]=0;
cnt[2][1]=0;
cnt[1][s1[i]-'0']++;
cnt[2][s2[i]-'0']++;
}
if(f1[i+1]==0)
{
if(i!=0&&f1[i-1]!=0)
{
cnt[1][s1[i]-'0']++;
cnt[2][s2[i]-'0']++;
}
ans+=min(cnt[1][0],cnt[2][0])+min(cnt[1][1],cnt[2][1]);
cnt[1][0]=0;
cnt[1][1]=0;
cnt[2][0]=0;
cnt[2][1]=0;
}
if(i!=0&&f1[i-1]!=0&&f1[i+1]!=0&&f1[i]!=0)
{
cnt[1][s1[i]-'0']++;
cnt[2][s2[i]-'0']++;
}
}
cout<<ans<<endl;
return ;
}
int cnt[3][3][maxn];
int main()
{
cin>>T;
while(T--)
{
cin>>n;
cin>>s1>>s2;
char t;
bool fB=1;
for(int i=0;i<n;i++)
{
cin>>t;
f1[i]=t-'0';
}
for(int i=0;i<n;i++)
{
cin>>t;
f2[i]=t-'0';
if(f2[i]!=f1[i])
{
fB=0;
}
}
int fA=1;
for(int i=1;i<n;i++)
{
if(s1[i]!=s1[i-1])
{
fA=0;
}
}
f1[n]=0;
f2[n]=0;
if(fA)
{
solveA();
continue;
}
if(fB)
{
solveB();
continue;
}
memset(cnt,0,sizeof(cnt));
num1=0,num2=0;
cnt[1][s1[0]-'0'][++num1]++;
bl1[0]=num1;
if(f1[0]==0)
{
num1++;
}
cnt[2][s2[0]-'0'][++num2]++;
bl2[0]=num2;
if(f2[0]==0)
{
num2++;
}
for(int i=1;i<n;i++)
{
if(f1[i]==0)
{
cnt[1][s1[i]-'0'][++num1]++;
bl1[i]=num1;
num1++;
}
else
{
cnt[1][s1[i]-'0'][num1]++;
bl1[i]=num1;
}
if(f2[i]==0)
{
cnt[2][s2[i]-'0'][++num2]++;
bl2[i]=num2;
num2++;
}
else
{
cnt[2][s2[i]-'0'][num2]++;
bl2[i]=num2;
}
}
int ans=0;
for(int i=0;i<n;i++)
{
while(f1[i]!=0&&f2[i]!=0){
i++;
}
if(f1[i]==0)
{
int t0,t1;
t0=min(cnt[1][0][bl1[i-1]],cnt[2][0][bl2[i-1]]);
t1=min(cnt[1][1][bl1[i-1]],cnt[2][1][bl2[i-1]]);
ans+=t1+t0;
cnt[1][0][bl1[i-1]]-=t0;
cnt[2][0][bl2[i-1]]-=t0;
cnt[1][1][bl1[i-1]]-=t1;
cnt[2][1][bl2[i-1]]-=t1;
if(i!=n)
{
int t=min(cnt[1][s1[i]-'0'][bl1[i]],cnt[2][s1[i]-'0'][bl2[i]]);
ans+=t;
cnt[1][s1[i]-'0'][bl1[i]]-=t;
cnt[2][s1[i]-'0'][bl2[i]]-=t;
}
}
else
{
int t0,t1;
t0=min(cnt[1][0][bl1[i-1]],cnt[2][0][bl2[i-1]]);
t1=min(cnt[1][1][bl1[i-1]],cnt[2][1][bl2[i-1]]);
ans+=t1+t0;
cnt[1][0][bl1[i-1]]-=t0;
cnt[2][0][bl2[i-1]]-=t0;
cnt[1][1][bl1[i-1]]-=t1;
cnt[2][1][bl2[i-1]]-=t1;
if(i!=n)
{
int t=min(cnt[1][s2[i]-'0'][bl1[i]],cnt[2][s2[i]-'0'][bl2[i]]);
ans+=t;
cnt[1][s2[i]-'0'][bl1[i]]-=t;
cnt[2][s2[i]-'0'][bl2[i]]-=t;
}
}
}
cout<<ans<<endl;
}
return 0;
}