#include #define For(i,l,r) for(register int i=(l);i<=(r);++i) #define For_down(i,r,l) for(register int i=(r);i>=(l);--i) using namespace std; const int n_MAX=1000000+5; int n,ans; char s[2][n_MAX]; char t[2][n_MAX]; int p[2],c[2][2]; inline void go(const int i) { For(j,0,1) c[!i][!j]-=c[i][j],c[i][j]=0; while(true) { ++p[i]; ++c[i][s[i][p[i]]-'0']; if(t[i][p[i]]=='0') { break; } } } inline void insert(const int i) { ++c[i][s[i][p[i]]-'0']; } inline void remove(const int i) { --c[i][s[i][p[i]]-'0']; } inline bool match() { return (s[0][p[0]]==s[1][p[1]]); } int main() { freopen("edit.in","r",stdin); freopen("edit.out","w",stdout); ios::sync_with_stdio(0),cin.tie(0); int T; cin>>T; while(T--) { cin>>n,ans=0; For(i,0,1) cin>>(s[i]+1),s[i][n+1]='0'; For(i,0,1) cin>>(t[i]+1),t[i][n+1]='0'; memset(p,0,sizeof(p)); memset(c,0,sizeof(c)); go(0); go(1); while(true) { if(p[0]==p[1]) ans+=match(),remove(0),remove(1); else if(p[0]p[1]) remove(0); For(i,0,1) { const int x=min(c[0][i],c[1][i]); ans+=x,c[0][i]-=x,c[1][i]-=x; } if(min(p[0],p[1])==(n+1)) break; if(p[0]==p[1]) memset(c,0,sizeof(c)),go(0),go(1); else if(p[0]p[1]) go(1),insert(0); } cout<<(ans-1)<<'\n'; } return 0; }