#include<bits/stdc++.h>
using namespace std;

#define ll long long

const int N=1e5+10;

int n,lst,ans;
char s0[N],s1[N];
char t0[N],t1[N];
int p[N][2];

struct seg
{
	struct node
	{
		int l,r,val,lz;
	}t[N<<2];
	#define ls (k<<1)
	#define rs (k<<1|1)
	#define L t[k].l
	#define R t[k].r
	#define mid ((L+R)>>1)
	void build(int k,int l,int r,int typ)
	{
		L=l,R=r,t[k].lz=t[k].val=0;
		if(L==R) return t[k].val=p[l][typ],void();
		build(ls,l,mid,typ),build(rs,mid+1,r,typ);
	}
	void mark(int k,int v)
	{
		t[k].val=t[k].lz=v;
	}
	void pushdown(int k)
	{
		if(!t[k].lz) return ;
		mark(ls,t[k].lz),mark(rs,t[k].lz);
		t[k].lz=0;
	}
	void update(int k,int l,int r,int v)
	{
		if(l<=L&&R<=r) return mark(k,v),void();
		pushdown(k);
		if(l<=mid) update(ls,l,r,v);
		if(r>mid) update(rs,l,r,v);
	}
	int query(int k,int x)
	{
		if(L==R) return t[k].val;
		pushdown(k);
		if(x<=mid) return query(ls,x);
		else return query(rs,x);
	}
	#undef ls
	#undef rs
	#undef L
	#undef R
	#undef mid 
}tree[2];

void work()
{
	ans=0;
	scanf("%d %s %s %s %s",&n,s0+1,s1+1,t0+1,t1+1);
	lst=n;
	for(int i=n;i>=1;i--)
	{
		if(s0[i]==s0[lst]) p[i][0]=lst;
		else p[i][0]=lst=i;
	}
	lst=n;
	for(int i=n;i>=1;i--)
	{
		if(s1[i]==s1[lst]) p[i][1]=lst;
		else p[i][1]=lst=i;
	}
	tree[0].build(1,1,n,0),tree[1].build(1,1,n,1);
	lst=n+1;
	for(int i=n;i>=1;i--)
	{
		if(t0[i]=='0') p[i][0]=lst=i;
		else p[i][0]=lst;
	}
	lst=n+1;
	for(int i=n;i>=1;i--)
	{
		if(t1[i]=='0') p[i][1]=lst=i;
		else p[i][1]=lst;
	}
//	for(int i=1;i<=n;i++) printf("%d ",p[i][0]);
//	printf("\n");
//	for(int i=1;i<=n;i++) printf("%d ",p[i][1]);
//	printf("\n");
	for(int i=1;i<=n;i++)
	{
		if(s0[i]!=s1[i])
		{
			int pos=0;
			if(t0[i]=='1')
			{
				int get=tree[0].query(1,i);
				if(get+1<p[i][0])
				{
					pos=get+1,swap(s0[i],s0[pos]),ans++;
					if(s0[pos]==s0[pos+1]) tree[0].update(1,i+1,pos,tree[0].query(1,pos+1));
					else tree[0].update(1,i+1,pos,pos);
				}
			}
			if(!pos&&t1[i]=='1')
			{
				int get=tree[1].query(1,i);
				if(get+1<p[i][1])
				{
					pos=get+1,swap(s1[i],s1[pos]),ans++;
					if(s1[pos]==s1[pos+1]) tree[1].update(1,i+1,pos,tree[1].query(1,pos+1));
					else tree[1].update(1,i+1,pos,pos);
				}
			}
		}
		else ans++;
	}
	printf("%d\n",ans);
}

int main()
{
	freopen("edit.in","r",stdin);
	freopen("edit.out","w",stdout);
	int t;scanf("%d",&t);
	while(t--) work();
	return 0;
}
