/*
期望得分:20pts
算法:
思路:
题目名称编辑字符串遗失的赋值树的遍历树上查询
题目类型传统型传统型传统型传统型
目录edit assign traverse query
可执行文件名edit assign traverse query
输入文件名edit.in assign.in traverse.in query.in
输出文件名edit.out assign.out traverse.out query.out
每个测试点时限1.0 秒1.0 秒1.0 秒2.0 秒
内存限制512 MiB 512 MiB 512 MiB 1024 MiB
测试点数目20 20 25 25
测试点是否等分是是是是
检查:long long? 1e9 bool? //freopen("neuvillette.in","r",stdin)???? 
*/
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
constexpr int N=1e5+7;
int n;
bool s1[N],s2[N],t1[N],t2[N];
namespace subA //特殊性质A：保证s1的所有字符相同。
{
int solve()
{
	int ans=0;
	for(int i=1;i<=n;i++) if(s1[i]==s2[i]) ans++;
	return ans;
}
}
namespace subB //特殊性质B：保证t1 = t2。
{
int solve()
{
	int ans=0,c1=0,c2=0,n1=0; //c1,c2 s1,s2有多少个1
	for(int i=1;i<=n;i++) if(t1[i]) n1++;
	for(int i=1;i<=n;i++) if(s1[i]==1&&t1[i]) c1++;
	for(int i=1;i<=n;i++) if(s2[i]==1&&t2[i]) c2++;
//	for(int i=1;i<=n;i++) cout<<s1[i];
//	puts("");
//	for(int i=1;i<=n;i++) cout<<s2[i];
//	puts("");
//	cerr<<' '<<n1<<endl;
	ans=min(c1,c2)+min(n1-c1,n1-c2);
	//ans=0;
	for(int i=1;i<=n;i++) if(s1[i]==s2[i]&&t1[i]==0) ans++;
	return ans;
}
}
//namespace subBrute  //暴力 
//{
//bool s11[N],s21[N];
//void solve()
//{
//	int n1=n,n2=n;
//}
//}
inline int input()
{
	scanf("%d",&n);
//	int id=-1;
	bool isA=1,isB=1;
	char ch;
	getchar();
	for(int i=1;i<=n;i++)
	{
		scanf("%c",&ch);
		if(ch=='1') s1[i]=1;
		else s1[i]=0;
	}
	for(int i=2;i<=n;i++) if(s1[i]!=s1[i-1])
	{
		isA=0;
		break;
	}
	getchar();
	for(int i=1;i<=n;i++)
	{
		scanf("%c",&ch);
		if(ch=='1') s2[i]=1;
		else s2[i]=0;
	}
	getchar();
	for(int i=1;i<=n;i++)
	{
		scanf("%c",&ch);
		if(ch=='1') t1[i]=1;
		else t1[i]=0;
	}
	getchar();
	for(int i=1;i<=n;i++)
	{
		scanf("%c",&ch);
		if(ch=='1') t2[i]=1;
		else t2[i]=0;
		if(t1[i]!=t2[i]) isB=0;
	}
	getchar();
	if(isA) return 1;
	else if(isB) return 2;
	else return -1;
}
int main()
{
	freopen("edit.in","r",stdin);
	freopen("edit.out","w",stdout);
	int T;
	scanf("%d",&T);
	while(T--)
	{
		int id=input();
		if(id==1) printf("%d\n",subA::solve());
		else if(id==2) printf("%d\n",subB::solve());
	}
	return 0;
}
/*
8:38 T1 可以切 100pts? 
8:58 A打完 
10:03 厕所回来找到B的hack了(其实没找到) 
11:24 打完T2的暴力回来写T1 
11:27
只剩下一个半小时了，我能做什么呢？
B死活调不出来 
11:58
如果有人看到这个那就帮忙发出来吧谢谢 
最后一小时了，能写点什么呢？ 
可能真的要暂时AFO了，从去年搞OI搞到现在，有什么进步呢？
从CSPS二等奖到CSPS二等奖，从NOIP2023 90pts到NOIP2024 20pts
whk已经退步了200年级排名了 
搞OI+WHK已经把我人搞垮不知道多少次了。 
教练说，以我的水平，在考场睡4个小时，
写半个小时的题目都能三等奖，
但是结果T1 性质B都调不出来。

12:56
看起来交卷的时间就要到了呢。 
我这个OIer，也该准备谢幕了。 
话虽说的这么轻松，但面对退役，果然还是有些不舍啊。 
再见，信息学竞赛，
希望你喜欢这三年来属于你的戏份。
---wwwidk1234(luogu uid=728483)
*/
/*
5
11001
10011
10110
10110
*/
/*
B:
5
10110
01101
11110
11110
*/
