#include <bits/stdc++.h>
using namespace std;
#define real signed
#define enl '\n'
#define inl inline
#define tot_time cerr << 1.0 * clock() / CLOCKS_PER_SEC << 's' << enl;
#define tot_memory cerr << 1.0 * abs(&mst - &men) / 1024.0 / 1024.0 << "MB" << enl;
typedef long long int lli;
typedef pair<int, int> pii;
typedef pair<lli, lli> pll;
namespace IO {
#define RS(filein, fileout) freopen(filein, "r", stdin), freopen(fileout, "w", stdout);
#define TD std::ios::sync_with_stdio(false), std::cin.tie(NULL), std::cout.tie(NULL);
#define getchar() ((tt == ss) && (tt = (ss = In) + fread(In, 1, 1 << 20, stdin), ss == tt) ? EOF : *ss++)
#define putln putchar('\n')
#define putsp putchar(' ')
char In[1 << 20], *ss = In, *tt = In;
inl lli read() {
lli x = 0, f = 1; char ch = getchar();
for (; ch < '0' || ch > '9'; ch = getchar()) if (ch == '-') f = -1;
for (; ch >= '0' && ch <= '9'; ch = getchar()) x = ((x << 1) + (x << 3) + (ch ^ 48));
return x * f;
}
inl void writ(lli x) {
if (x < 0) {putchar('-'); x = -x; }
if (x >= 10) writ(x / 10);
return putchar(x % 10 + '0'), void();
}
};
using namespace IO;
namespace Modulo {
const int mod = 1000000007;
#define adwm(x, w) (((x += w) >= mod) && (x -= mod))
#define suwm(x, w) (((x -= w) < 0) && x += mod))
};
using namespace Modulo;
const double pi = 3.14159265359879323846;
const uint64_t Ba = 1313131;
const uint64_t Bb = 233333;
const uint64_t Ma = 998244353;
const uint64_t Mb = 1000000007;
mt19937_64 mrn(std::chrono::system_clock::now().time_since_epoch().count());
bool mst;
int n;
string s, t;
string ls, lt;
bool men;
void init() {
return void();
}
void solv() {
cin >> n;
cin >> s >> t;
cin >> ls >> lt;
s = ' ' + s, t = ' ' + t;
ls = ' ' + ls, lt = ' ' + lt;
s = s + '&', t = t + '*';
ls = ls + '0', lt = lt + '0';
int an = 0;
int cs1 = 0, cs0 = 0, ct1 = 0, ct0 = 0;
int is = 1, it = 1;
for (; is <= n || it <= n; ) {
for (; is <= n && ls[is] != '0'; is++) cs0 += s[is] == '0', cs1 += s[is] == '1';
for (; it <= n && lt[it] != '0'; it++) ct0 += t[it] == '0', ct1 += t[it] == '1';
int d0 = min(cs0, ct0), d1 = min(cs1, ct1);
an += d0 + d1;
cs0 -= d0, ct0 -= d0, cs1 -= d1, ct1 -= d1;
if (is > it) {
if (ct0) cs1 -= ct0, ct0 = 0;
if (ct1) cs0 -= ct1, ct1 = 0;
if (t[it] == '1') {
if (cs1) cs1--, an++;
else cs0--;
}
else {
if (cs0) cs0--, an++;
else cs1--;
}
it++;
}
else if (it > is) {
if (cs0) ct1 -= cs0, cs0 = 0;
if (cs1) ct0 -= cs1, cs1 = 0;
if (s[is] == '1') {
if (ct1) ct1--, an++;
else ct0--;
}
else {
if (ct0) ct0--, an++;
else ct1--;
}
is++;
}
else an += s[is] == t[it], is++, it++, cs0 = cs1 = ct0 = ct1 = 0;
}
cout << an << enl;
return void();
}
#define Silf
#define Chpa
#define Clsy
real main() {
#ifdef Silf
RS("edit.in", "edit.out")
#endif
#ifdef Chpa
tot_memory
#endif
#ifdef Clsy
TD
#endif
int ques = 1;
cin >> ques;
for (; ques--; ) solv();
#ifdef Chpa
tot_time
#endif
return 0;
}