#include <bits/stdc++.h>
#define For(e,e1,e2) for(int e=(e1);e<=(e2);e++)
#define For_(e,e1,e2) for(int e=(e1);e<(e2);e++)
#define Rof(e,e1,e2) for(int e=(e2);e>=(e1);e--)
#define Rof_(e,e1,e2) for(int e=(e2);e>(e1);e--)
#define exc(e) if(e) continue
#define stop(e) if(e) break
#define ret(e) if(e) return 
#define LL long long
#define ULL unsigned long long
#define DB double
#define cint const int
#define cLL const long long
#define vct vector
#define pb push_back
#define ft first
#define sc second
using namespace std;
void main_init()
{
	
}
cint N=100200;
int n;
array <int,2> a[N],b[N];
char str[N];
void input1(array <int,2> w[])
{
	scanf("%s",str+1);
	For(i,1,n)
	{
		w[i][0]=w[i][1]=0;
		w[i][str[i]-'0']++;
	}
}
void input2(array <int,2> w[])
{
	scanf("%s",str+1);
	for(int l=1,r=1;l<=n;l=r+1)
	{
		r=l;
		array <int,2> cnt=w[l];
		if(str[l]=='1')
		{
			while(r<n&&str[r+1]=='1')
			{
				r++;
				For(k,0,1)
				{
					cnt[k]+=w[r][k];
					w[r][k]=0;
				}
			}
		}
		w[l]=cnt;
	}
}
void main_solve()
{
	scanf("%d",&n);
	input1(a); input1(b);
	input2(a); input2(b);
	int ans=0;
	array <int,2> cnt1={0,0},cnt2={0,0};
	For(i,1,n)
	{
		For(k,0,1) cnt1[k]+=a[i][k],cnt2[k]+=b[i][k];
		if(cnt1[0]&&cnt2[0])
		{
			ans++;
			cnt1[0]--,cnt2[0]--;
		}
		else if(cnt1[1]&&cnt2[1])
		{
			ans++;
			cnt1[1]--,cnt2[1]--;
		}
		else
		{
			if(cnt1[0]) cnt1[0]--;
			else cnt1[1]--;
			if(cnt2[0]) cnt2[0]--;
			else cnt2[1]--;
		}
	}
	printf("%d\n",ans);
}
int main()
{
	freopen("edit.in","r",stdin);
	freopen("edit.out","w",stdout);
	main_init();
	int _; scanf("%d",&_); while(_--) 
		main_solve();
	return 0;
}
/*

*/
