#include<bits/stdc++.h>
using namespace std;
using ui=unsigned int;
using ll=long long;
using ull=unsigned long long;
using i128=__int128;
using u128=__uint128_t;
using pii=pair<int,int>;
#define fi first
#define se second
constexpr int N=1e5+5;
int n;string s[2],t[2];
struct dsu{
	int f[N],cnt[N][2];
	void init(int n){for(int i=0;i<n;i++)f[i]=i,cnt[i][0]=cnt[i][1]=0;}
	int get(int x){return f[x]==x?x:f[x]=get(f[x]);}
	void merge(int x,int y){
		x=get(x),y=get(y);
		if(x==y)return;
		cnt[y][0]+=cnt[x][0];
		cnt[y][1]+=cnt[x][1];
		f[x]=y;
	}
};
dsu d[2];
void solve(){
	cin>>n>>s[0]>>s[1]>>t[0]>>t[1];
	d[0].init(n),d[1].init(n);
	for(int i=0;i<n;i++){
		++d[0].cnt[i][s[0][i]^48];
		++d[1].cnt[i][s[1][i]^48];
	}
	for(int i=1;i<n;i++){
		if(t[0][i]=='1'&&t[0][i-1]=='1')
			d[0].merge(i,i-1);
		if(t[1][i]=='1'&&t[1][i-1]=='1')
			d[1].merge(i,i-1);
	}
	int ans=0;
	for(int i=0;i<n;i++){
		int f0=d[0].get(i),f1=d[1].get(i);
		bool flag=0;
		for(int z=0;z<2;z++){
			for(int x=0;x<2;x++){
				int y=x^z;
				if(d[0].cnt[f0][x]&&d[1].cnt[f1][y]){
					ans+=!z;
					--d[0].cnt[f0][x];
					--d[1].cnt[f1][y];
					flag=1;
					break;
				}
			}
			if(flag)break;
		}
	}
	cout<<ans<<'\n';
}
int main(){
	freopen("edit.in","r",stdin);
	freopen("edit.out","w",stdout);
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	int _Test;cin>>_Test;
	while(_Test--)solve();
	return 0;
}
