#include<bits/stdc++.h>
using namespace std;
#define fo(a,b,c) for(int a=b;a<=c;a++)
#define go(a,b,c) for(int a=b;a>=c;a--)
typedef long long ll;
typedef pair<int,int> pii;
const int MAX=1e5+5;
int n,b01[MAX],b11[MAX],b02[MAX],b12[MAX];
string s1,s2,t1,t2;
vector<pii> q1,q2;
bool fga=1,fgb=1,fgc=1;
//[l,r] for every "free"block
//freopen()
//froepen()
//edit2
//bits\stdc++.h
//mian
//slvoe
//x1,y1,x2,y2,next,node
//enjoy my blog ，luoguid：560807，木棉絮123 
//qq:2260065019，是福瑞/furry，欢迎扩列（ 
/*
感觉有点麻烦，四道题看下来没有一道一眼题。
压缩包密码是 Forget#2501，PDF密码是 memory@2107，被扎心了。 
### T1
值域为0和1，感觉是个性质。
可以用前缀优化。
完了不会，直接二十分跑路
高二已经没有复活币了，这次也拿不到一等了。
没事反正一直都是拿二等这下变成二流傻瓜了（doge） 
三道题调半天调不出来，不知道能混多少分。 
反正t3二十分和t1六十分肯定有。t2的容斥写出来了但是过不了，预计20分。
按自己挂分的本领铁定只有40分了。 
有点难受，也释然了，毕竟自己天天摆烂。
已经不是很想搞oi了。
还是退役好。 
这次1=分数线至少120分。而且t1应该不难。 
没关系，其实都一样的。 
你说你不想在这里，我也不想在这里。
但…… 
难度猜测：绿蓝紫蓝 
*/ 
void debug1()
{
	for(auto v:q1)
	{
		cout<<"#"<<v.first<<' '<<v.second;
	}
	cout<<'\n';
	for(auto v:q2)
	{
		cout<<"#"<<v.first<<' '<<v.second;
	}
	cout<<'\n';
}
void init()
{
	cin>>n>>s1>>s2>>t1>>t2;
	s1=' '+s1;
	s2=' '+s2;
	t1=' '+t1;
	t2=' '+t2;
	fo(i,2,n)
	{
		if(s1[i]!=s1[1])
			{fga=0;break;}
	}
	fo(i,1,n)
	{
		if(t1[i]!=t2[i])
			{fgb=0;break;}
	}
	int lst=1;
	q1.clear();
	q2.clear();
	memset(b01,0,sizeof(b01));
	memset(b11,0,sizeof(b11));
	memset(b02,0,sizeof(b02));
	memset(b12,0,sizeof(b12));
	fo(i,1,n)
		b01[i]=b01[i-1]+int(s1[i]=='0');
	fo(i,1,n)
		b11[i]=b11[i-1]+int(s1[i]=='1');
	fo(i,1,n)
		b02[i]=b02[i-1]+int(s2[i]=='0');
	fo(i,1,n)
		b12[i]=b12[i-1]+int(s2[i]=='1');
	fo(i,1,n)
	{
		if(t1[i]=='0')
		{
			q1.push_back({i,i});
			lst=i+1;
		}
		else if(t1[i+1]=='0')
		{
			q1.push_back({lst,i});
			lst=i+1;
		}
	}
	if(lst!=n+1)
	{
		q1.push_back({lst,n});
	}
	lst=1;
	fo(i,1,n)
	{
		if(t2[i]=='0')
		{
			q2.push_back({i,i});
			lst=i+1;
		}
		else if(t2[i+1]=='0')
		{
			q2.push_back({lst,i});
			lst=i+1;
		}
	}
	if(lst!=n+1)
	{
		q2.push_back({lst,n});
	}
	lst=1;
//	debug1();
}
void work()
{
	int ans=0,i=0,j=0;
	int l1=q1[0].first,r1=q1[0].second,l2=0,r2=0;
	int res0_1=b01[r1]-b01[l1-1],res1_1=b11[r1]-b11[l1-1];
	int exl2=0,exr2=0,ex02=0,ex12=0;
	int res0_2=0,res1_2=0;
	for(;i<q1.size();i++)
	{
		l1=q1[i].first,r1=q1[i].second;
		res0_1=b01[r1]-b01[l1-1],res1_1=b11[r1]-b11[l1-1];
//跳j 
		while(r2<n&&q2[j].second<=r1)
		{
			l2=q2[j].first,r2=q2[j].second;
			if(exl2!=l2&&exr2!=r2)
				res0_2+=b02[r2]-b02[l2-1],res1_2+=b12[r2]-b12[l2-1];
			j++;
		}
		if(r1==r2)
		{
			ans+=min(res0_1,res0_2)+min(res1_1,res1_2);
			res0_2=res1_2=0;
//			j++;
			continue;
		}
		if(r2<n&&exr2<n)
		{
			exl2=q2[j].first,exr2=q2[j].second;
			ex02=b02[exr2]-b02[exl2-1],ex12=b12[exr2]-b12[exl2-1];
		}
		ans+=min(res0_1,res0_2)+min(res1_1,res1_2);
		int spare=r1-r2;
		if(res0_1>res0_2)
		{
			if(spare>ex02)
			{
				ans+=ex02;
				ex02=0;
				ex12-=spare-ex02;
			}
			else
			{
				ans+=spare;
				ex02-=spare;
			}
		}
		else if(res1_1>res1_2)
		{
			if(spare>ex12)
			{
				ans+=ex12;
				ex12=0;
				ex02-=spare-ex12;
			}
			else
			{
				ans+=spare;
				ex12-=spare;
			}
		}
		if(r2<n)
		{
			int exl1=q1[i+1].first,exr1=q1[i+1].second;
			int ex01=b01[exr1]-b01[exl1-1],ex11=b11[exr1]-b11[exl1-1];
			while(exr1<exr2&&exr1<=n)
			{
				ans+=min(ex01,ex02)+min(ex11,ex12);
				ex02-=min(ex01,ex02);
				ex12-=min(ex11,ex12);
				i++;
				exl1=q1[i+1].first,exr1=q1[i+1].second;
				ex01=b01[exr1]-b01[exl1-1],ex11=b11[exr1]-b11[exl1-1];
			}
		}
		if(exr2)
		{
			l2=exl2;r2=exr2;
			res0_2=ex02,res1_2=ex12;
			exr2=0;
			j++;
		}
		else
		{
			res0_2=0,res1_2=0;
		}
	}
	cout<<ans<<'\n';
}
void worka()
{
	int ans=0;
	fo(i,1,n)
	{
		if(s1[i]==s2[i])
			ans++;
	}
	cout<<ans<<'\n';
}
void workb()
{
	int ans=0,i=0;
	int l1=0,r1=0,l2=0,r2=0;
	int res0_1=0,res1_1=0;
	int res0_2=0,res1_2=0;
	for(;i<q1.size();i++)
	{
		l1=q1[i].first,r1=q1[i].second;
		l2=q2[i].first,r2=q2[i].second;
		res0_1=b01[r1]-b01[l1-1],res1_1=b11[r1]-b11[l1-1];
		res0_2=b02[r2]-b02[l2-1],res1_2=b12[r2]-b12[l2-1];
		ans+=min(res0_1,res0_2)+min(res1_1,res1_2);
	}
	cout<<ans<<'\n';
}
void solve()
{
	fga=fgb=fgc=1;
	init();
	if(fga)
		worka();
	else if(fgb)
		workb();
	else
		work();
}
int main()
{
	ios::sync_with_stdio(false);
	freopen("edit.in","r",stdin);
	freopen("edit.out","w",stdout);
	int t=1;
	cin>>t;
	while(t--)
		solve();
}
/*
1
6
011101
111010
111010
101101
1
6
001000
100000
111111
000000
*/ 
