#include using std::cin;using std::cout;using std::cerr;using std::ios;using std::endl; const int N = 1e5+1000; int n; char s[2][N],c[2][N]; int fa[2][N],blk[2][N],wht[2][N]; int Find(int k,int x) { if(x<=0) cerr<>T; while(T--) { int ans=0; cin>>n; Clear(); cin>>(s[0]+1); cin>>(s[1]+1); cin>>(c[0]+1); cin>>(c[1]+1); for(int k=0;k<=1;k++) { for(int i=1;i<=n-1;i++) { if(c[k][i]=='1' && c[k][i+1]=='1') Union(k,i,i+1); } } for(int k=0;k<=1;k++) { for(int i=1;i<=n;i++) { if(c[k][i]=='0') continue; if(s[k][i]=='1') blk[k][Find(k,i)]++; if(s[k][i]=='0') wht[k][Find(k,i)]++; } } for(int i=1;i<=n;i++) { if(c[0][i]=='1' && c[1][i]=='1') { if(blk[0][Find(0,i)]>=1 && blk[1][Find(1,i)]>=1) { blk[0][Find(0,i)]--; blk[1][Find(1,i)]--; ans++; } else if(wht[0][Find(0,i)]>=1 && wht[1][Find(1,i)]>=1) { wht[0][Find(0,i)]--; wht[1][Find(1,i)]--; ans++; } } else if(c[0][i]=='0' && c[1][i]=='0') { if(s[0][i]==s[1][i]) ans++; } else if(c[0][i]=='0') { if(s[0][i]=='1' && blk[1][Find(1,i)]>=1) ans++,blk[1][Find(1,i)]--; if(s[0][i]=='0' && wht[1][Find(1,i)]>=1) ans++,wht[1][Find(1,i)]--; } else if(c[1][i]=='0') { if(s[1][i]=='1' && blk[0][Find(0,i)]>=1) ans++,blk[0][Find(0,i)]--; if(s[1][i]=='0' && wht[0][Find(0,i)]>=1) ans++,wht[0][Find(0,i)]--; } } cout<