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

const int INF=1e5;

char s1[INF+5],s2[INF+5],s11[INF+5],s22[INF+5];

struct Node {
	int v,is,up;
};

queue<Node> a;
queue<Node> b;

bool vs[INF+5];
int tt[INF+5];

int main() {
	freopen("edit.in","r",stdin);
	freopen("edit.out","w",stdout);
	int T;
	scanf("%d",&T);
	for(int Timp=1;Timp<=T;Timp++) {
		int n;
		scanf("%d",&n);
		scanf("%s%s%s%s",&s1,&s2,&s11,&s22);

		//A
		bool flag1=1,flag2=1,tct1=0,tct2=0;
		for(int i=0; i<n; i++) {
			if(i!=0&&s1[i]!=s1[i-1]) flag1=0;
			if(s11[i]!=s22[i]) flag2=0;
			if(s11[i]=='0') tct1++;
			if(s22[i]=='0') tct2++;
		}
		if(flag1==1) {
			int cnt=0;
			for(int i=0; i<n; i++) if(s1[i]==s2[i]) cnt++;
			cout<<cnt;
			continue;
		}
		if(flag2==1) {
			memset(vs,0,sizeof(vs));
			memset(tt,0,sizeof(tt));
			int ti=0;
			for(int i=0;i<n;i++) {
				if(s11[i]=='0') tt[++ti]=i;
			}
			int cnt=0;
			for(int i=1;i<=ti;i++) {
				int s1_1=0,s1_0=0;
				int s2_1=0,s2_0=0;
				for(int j=tt[i-1];j<=tt[i];j++) {
					if(s1[j]=='1') s1_1++;
					else if(s1[j]=='0') s1_0++;
					if(s2[j]=='1') s2_1++;
					else if(s2[j]=='0') s2_0++;
				}
				int nwxy=max(s1_1,s2_1)-min(s1_1,s2_1);
				int xy=max(s1_0,s2_0)-min(s1_0,s2_0);
				cnt=cnt+nwxy+xy;
			}
			cout<<n-cnt<<endl;
		}
		
		while(!a.empty()) a.pop();
		while(!b.empty()) b.pop();
		int cnt=0;
		for(int i=0; i<n; i++) {
			int av=s1[i]-'0',ais=s11[i]-'0';
			int bv=s2[i]-'0',bis=s22[i]-'0';
			if(!b.empty()) {
				if((ais==0||a.front().is==0)&&(bis==0||b.front().is==0)) {
					while(!a.empty()||!b.empty()) {
						a.pop();
						b.pop();
						cnt++;
					}
					if(ais==0&&bis==0&&av!=bv) cnt++;
					else if(av!=bv) {
						a.push({av,ais,1});
						b.push({bv,bis,1});
					}
				} else if(ais==0&&b.front().is==1&&bis==1) {
					a.front().up=0;
					a.front().is=0;
					if(a.front().v==bv) {
						a.pop();
						a.front().up=0;
						a.front().is=0;
					} else {
						a.push({av,ais,1});
						b.push({bv,bis,1});
					}
				} else if(bis==0&&a.front().is==1&&ais==1) {
					b.front().up=0;
					b.front().is=0;
					if(b.front().v==av) {
						b.pop();
						b.front().up=0;
						b.front().is=0;
					} else {
						a.push({av,ais,1});
						b.push({bv,bis,1});
					}
				} else {
					if(av==b.front().v&&a.front().is==1) {
						int tmp=b.front().up;
						b.pop();
						if(tmp==0) {
							b.front().up=0;
							b.front().is=0;
						}
					} else if(bv==a.front().v&&b.front().is==1) {
						int tmp=a.front().up;
						a.pop();
						if(tmp==0) {
							a.front().up=0;
							a.front().is=0;
						}
					}
				}
			} else {
				if( (bv==a.front().v)||(bis==0&&a.front().is==0) ) {
					int tmp=a.front().up;
					a.pop();
					if(tmp==0) {
						a.front().up=0;
						a.front().is=0;
					}
				} else b.push({bv,bis,1});
			}
		}
		while(!a.empty()||!b.empty()) {
			a.pop();
			b.pop();
			cnt++;
		}
		cout<<(n-cnt)<<endl;
		cout<<"Problem\n";
	}
	return 0;
}
/*
1
6
011101
111010
111010
101101

4
*/
