// Problem: B. Flip the Bits
// Contest: Codeforces - Codeforces Round #712 (Div. 2)
// URL: https://codeforces.com/contest/1504/problem/B
// Memory Limit: 256 MB
// Time Limit: 1000 ms
// 
// Powered by CP Editor (https://cpeditor.org)

#include<bits/stdc++.h>
using namespace std;

#define boost ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
#pragma GCC optimize("O2")

#define pb push_back
#define fi first
#define se second
#define pii pair<int,int>
#define pll pair<ll,ll>
#define vi vector<int>  // vector of int-- vector<int>
#define vii vector<ii> // vector of pair-- vector<pair<int,int>>
#define endl '\n'
#define inf 1e18

typedef unsigned long long int lli;
typedef long long int ll;

vector<ll> ar[1000001];
ll vis[1000001],dis[1000001],level[1000001];

const int MAX_SIZE = 1000001;

vector<int >isprime(MAX_SIZE , true);
vector<int >prime;
vector<int >SPF(MAX_SIZE);

void manipulated_seive(int N) {
    isprime[0] = isprime[1] = false ;
    for (int i=2; i<N ; ++i) {
        if (isprime[i]){
            prime.push_back(i);
            SPF[i] = i;
        }
        for (int j=0; j < (int)prime.size() && i*prime[j] < N && prime[j] <= SPF[i];++j) {
            isprime[i*prime[j]]=false;
            SPF[i*prime[j]] = prime[j] ;
        }
    }
}

bool sortbysec(const pair<int,int> &a,const pair<int,int> &b){return (a.second < b.second);}
//sort(v.begin(), v.end(), sortbysec);

unordered_map<ll,ll> myp;

void primeFactors(ll n) {
    while (n % 2 == 0){
        myp[2]++;
        n = n/2;
    }
    for (ll i = 3; i <= sqrt(n); i = i + 2){
        while (n % i == 0) {
            myp[i]++;
            n = n/i;
        }
    }
    if (n > 2)
        myp[n]++;
}

ll gcd(ll a, ll b){if (b == 0)return a;return gcd(b, a % b);}
ll findlcm(ll a, ll b){return a*b/gcd(a,b);}

void fun(){
	ll n;
	cin>>n;
	string a,b;
	cin>>a>>b;
	if(a==b){
		cout<<"YES"<<endl;
		return;
	}
	vector<ll> c0(n,0);
	vector<ll> c1(n,0);
	for(ll i=0;i<n;i++){
		if(a[i]=='0'){
			c0[i]++;
		}
		if(i!=0){
			c0[i]+=c0[i-1];
		}
		if(a[i]=='1'){
			c1[i]++;
		}
		if(i!=0){
			c1[i]+=c1[i-1];
		}
	}
	ll c=0;
	for(ll i=n-1;i>=0;i--){
		if(c==0 && a[i]!=b[i] && c0[i]==c1[i]){
			c++;
			a[i]=b[i];
		}
		else{
			if(c%2!=0){
				if(a[i]=='0'){
					a[i]='1';
				}
				else if(a[i]=='1'){
					a[i]='0';
				}
			}
			if(a[i]!=b[i] && c0[i]!=c1[i]){
				cout<<"NO"<<endl;
				return;
			}
			else if(a[i]==b[i]){
				continue;
			}
			else if(a[i]!=b[i] && c0[i]==c1[i]){
				c++;
				if(a[i]=='0'){
					a[i]='1';
				}
				else if(a[i]=='1'){
					a[i]='0';
				}
			}
		}
	}
	if(a==b){
		cout<<"YES"<<endl;
		return;
	}
	cout<<"NO"<<endl;
	return;
}

int main(){
    boost
    lli t;
    cin>>t;
    while(t--){
        cout<<fixed;
    	cout<<setprecision(10);
        fun();
    }
    return 0;
}
