/*There is no salvation without suffering*/   #pragma GCC optimize( Ofast )   #pragma GCC target( avx,avx2,fma )   #include<iostream>   #include<string>   #include<algorithm>   #include<numeric>   #include<cmath>   #include<vector>   #include<iomanip>   #include<map>   #include<set>   #include<stack>   #include<queue>   #include<utility>   #include<iterator>   using namespace std;   #define ll long long   #define pb push_back   #define pf push_front   #define mp make_pair   #define tt ll t;cin>>t;while(t--)   #define nn cout<<endl;   #define ff(i,a,n) for(ll i=a;i<n;i++)   #define f(i,n,a) for(ll i=n;i>=a;i--)   #define fr(x, a) for(auto &x:a)   #define F(a) for(auto &x:a) cin>>x   #define cY cout<< YES n    #define cN cout<< NO n    #define cy cout<< Yes n    #define cn cout<< No n    #define sc second   #define fs first   #define c(a) cout<<a<<endl   #define all(a) a.begin(),a.end()   #define pi 3.14159265359   ll M=1e9+7;   ll mod(ll x){return ((x%M+M)%M);}   ll gcd(ll a,ll b);   ll lcm(ll a,ll b);   bool prime(ll n);   ll BinExp(ll base,ll power);   ll ModInverse(ll base);   ll nCr(ll n,ll r);   ll fact(ll n){ return (n<=1)? 1 : n*fact(n-1);}       /* Read the damn question carefully*/   void solve()   {    ll n; cin>>n;    string a,b; cin>>a>>b;    ll o=count(all(a), 1 ),z=n-o;    ll x=0;    bool ans=true;   // c(o<<   <<z);    for(ll i=n-1;i>=0;i--)    {     if(x==0)     {      if(a[i]!=b[i])      {       if(o==z)       {        x=1-x;        if(a[i]== 1 )        {         a[i]= 0 ; z--;        }        else        {         a[i]= 1 ; o--;        }       }       else       {        ans=false; break;       }      }      else      {       if(a[i]== 0 )        z--;       else o--;      }     }     else     {      if(a[i]== 1 )       a[i]= 0 ;      else a[i]= 1 ;      if(a[i]!=b[i])      {       if(o==z)       {        x=1-x;        if(a[i]== 1 )        {         a[i]= 0 ; z--;        }        else        {         a[i]= 1 ; o--;        }       }       else       {        ans=false; break;       }      }      else      {       if(a[i]== 0 )        z--;       else o--;      }     }    }   // c(a);    if(ans)     cY;    else cN;       }       int main()   {    ios::sync_with_stdio(false);    cin.tie(0); cout.tie(0);    tt    solve();   }   /*               */   ll nCr(ll n,ll r)   {    r=(n-r<=r) ? n-r : r;    ll ans=1;    for(ll i=0;i<r;i++)    {     ans*=(n-i);     ans/=(i+1);    }    return ans;   }   ll gcd(ll a,ll b){    if(a==0) return b;    return (a==1) ? a:gcd(b%a,a);   }    ll lcm(ll a,ll b) {return (a/gcd(a,b))*b; }   bool prime(ll n){    if(n<2) return false;    for(ll i=2;i<=sqrt(n);i++)     if(n%i==0)      return false;    return true;   }   ll BinExp(ll base,ll power){    if(!power)     return 1;    ll res=1;    while(power>1){     if(power%2){      power--;      res*=base;     }     else{      base*=base;      power/=2;     }    }    return base*res;   }   ll ModInverse(ll base){    ll power=M-2;    if(!power)     return 1;    ll res=1;    while(power>1){     if(power%2){      power--;      res=mod(res*base);     }     else{      base=mod(base*base);      power/=2;     }    }    return mod(base*res);   }