#include <bits/stdc++.h>
using namespace std;
constexpr int N = 1e5 + 5;
int n, ans;
char a[N], b[N], c[N], d[N];
struct Node { int l, r, col, c0, c1; } u[N], v[N];
void solve(Node &x, Node &y)
{
int l = max(x.l, y.l);
int r = min(x.r, y.r);
if (l > r) return;
int res = 0;
if (x.col == 1 && y.col == 1)
{
res = min(r - l + 1, min(x.c0, y.c0) + min(x.c1, y.c1));
ans += res;
int mi = min(r - l + 1, min(x.c0, y.c0));
x.c0 -= min(res, mi);
y.c0 -= min(res, mi);
res -= mi;
x.c1 -= res;
y.c1 -= res;
}
else if (x.col == 1)
{
int c0 = 0, c1 = 0;
for (int i = l; i <= r; i++) if (b[i] == '0') c0++; else c1++;
res = min(r - l + 1, min(x.c0, c0) + min(x.c1, c1));
ans += res;
int mi = min(x.c0, c0); x.c0 -= min(res, mi); res -= mi; x.c1 -= res;
}
else if (y.col == 1)
{
int c0 = 0, c1 = 0;
for (int i = l; i <= r; i++) if (a[i] == '0') c0++; else c1++;
res = min(r - l + 1, min(y.c0, c0) + min(y.c1, c1));
ans += res;
int mi = min(y.c0, c0); y.c0 -= min(res, mi); res -= mi; y.c1 -= res;
}
else
{
for (int i = l; i <= r; i++) if (a[i] == b[i]) res++;
ans += res;
}
}
void solve()
{
cin >> n >> a >> b >> c >> d;
ans = 0;
int cnu = 0, cnv = 0, j = 0, p[2];
j = p[0] = p[1] = 0;
for (int i = 0; i < n; i++)
{
if (c[i] != c[j]) { u[++cnu] = Node{j, i - 1, c[j] - '0', p[0], p[1]}; j = i; p[0] = p[1] = 0; }
p[a[i] - '0']++;
}
u[++cnu] = Node{j, n - 1, c[j] - '0', p[0], p[1]};
j = p[0] = p[1] = 0;
for (int i = 0; i < n; i++)
{
if (d[i] != d[j]) { v[++cnv] = Node{j, i - 1, d[j] - '0', p[0], p[1]}; j = i; p[0] = p[1] = 0; }
p[b[i] - '0'] ++;
}
v[++cnv] = Node{j, n - 1, d[j] - '0', p[0], p[1]};
for (int i = 1, j = 1; i <= cnu; i++)
{
while (j < cnv && v[j + 1].l <= u[i].r) { solve(u[i], v[j]); j++; }
solve(u[i], v[j]);
}
cout << ans << '\n';
}
signed main()
{
freopen("edit.in", "r", stdin);
freopen("edit.out", "w", stdout);
ios::sync_with_stdio(false); cin.tie(0);
int T; cin >> T; while (T--) solve();
}