#include <bits/stdc++.h>
using namespace std;
using ll = long long int;
#define inf 1000000000000000LL
#define mod 1000000007LL
#define FOR(i,a,b) for(int i = a; i < b; i++)

void solve() {
    ll n; string s;
    cin >> n >> s;
    vector <ll> la(n), lc(n);
    FOR(i,0,n) cin >> la[i]; FOR(i,0,n) cin >> lc[i];
    vector <ll> prefix(n, inf);
    if (lc[0] != la[0] && s[0] == '1'){
        cout << "No" << "\n";
        return;
    }
    else{
        la[0] = lc[0];
        s[0] = '1';
        prefix[0] = lc[0];
    }
    for (int i = 1; i < n; i++){
        if (lc[i] < lc[i-1]){
            cout << "No" << "\n";
            return;
        }
        if (lc[i] != lc[i-1]){
            prefix[i] = lc[i];
        }
    }
    for (int i = n-1; i >= 1; i--){
        if (prefix[i] != inf && s[i] == '1'){
            if (prefix[i-1] != inf && prefix[i-1] != prefix[i] - la[i]){
                cout << "No" << "\n";
                return;
            }
            prefix[i-1] = prefix[i] - la[i];
        }
    }
    // cout << "hi";
    ll sum = 0;
    // FOR(i,0,n){
    //     cout << prefix[i] << " ";
    // }
    // cout << "\n";
    for (int i = 0; i < n; i++){
        sum += la[i];
        if (prefix[i] != inf && s[i] == '1' && sum != prefix[i]){
            cout << "No" << "\n";
            return;
        }
        if (prefix[i] != inf && s[i] == '0'){
            la[i] = prefix[i] - sum;
        }
        if (prefix[i] == inf && s[i] == '0'){
            la[i] = -1000000000000LL;
        }
        if (s[i] == '0') sum += la[i];
        // cout << sum << " ";
        if (sum > lc[i]){
            // cout << "hi" << " " << sum << " " << lc[i] << " ";
            cout << "No" << "\n";
            return;
        }
    }
    cout << "Yes" << "\n";
    for (int i = 0; i< n; i++){
        cout << la[i] << " ";
    }
    cout << "\n";
}

int main() {
    // ios::sync_with_stdio(false);
    // cin.tie(nullptr);

    ll t = 1;
    cin >> t;
    while (t--) {
        solve();
    }

    return 0;
}