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

#define FOR(i, a, b) for (long long i = (a); i < (b); i++)
#define REP(i, N) for (long long i = 0; i < (N); i++)
#define FORR(i, a, b) for (long long i = (a); i >= (b); i--)
#define REPR(i, N) for (long long i = n; i >= 0; i--)
#define SORT(v, n) sort(v, v + n);
#define VSORT(v) sort(v.begin(), v.end());
#define ALL(s) (s).begin(), (s).end()
#define pb(a) push_back(a)

#define fi first
#define se second

#define PI acos(-1.0)
#define INF 1000000007
#define EPS 1e-10
#define MAX_M 100100

typedef long long ll;
typedef pair<ll, ll> P;
typedef pair<double, double> PD;
typedef pair<string, ll> PS;
typedef vector<ll> V;
typedef pair<P, char> PC;

int dy[] = {0, 0, 1, -1, 0};
int dx[] = {1, -1, 0, 0, 0};

int main()
{
    ll N;
    string s;
    cin >> N;
    cin >> s;
    string ans;
    string init_pattern[4] = {"SS", "SW", "WS", "WW"};
    for(string p: init_pattern){
        ans = "";
        ans += p;
        FOR(i,2,N+2){
            if(s[(i-1)%N] == 'o'){
                if(ans[i-1] == 'S'){
                    ans += ans[i-2];   
                }else{
                    ans += (ans[i-2] == 'S') ? 'W' : 'S';
                }
            }else {
                if(ans[i-1] == 'S'){
                    ans += (ans[i-2] == 'S') ? 'W' : 'S';
                }else{
                    ans += ans[i-2]; 
                }
            }
        }
        if (ans[0] == ans[N] && ans[1] == ans[N+1]){
            break;
        }
        ans = "-1";
    }
    cout << ans.substr(0,N) << endl;
}

#include <bits/stdc++.h>
//#include <atcoder/all>

using namespace std;
//using namespace atcoder;
using usize = ::std::size_t;
using u64 = ::std::int_least64_t;
//using u64 = long long;
static constexpr u64 Inf = ::std::numeric_limits<u64>::max() / 2;

int getrandmax() {
    static uint32_t y = time(NULL);
    y ^= (y << 13); y ^= (y >> 17);
    y ^= (y << 5);
    return abs((int)y);
}
int getrand(int l, int r) { // [l, r]
    return getrandmax() % (r - l + 1) + l;
}


int main(int argc, char *argv[])
{
    
    
    cin.tie(0) ;
    ios::sync_with_stdio(false) ;
    
    int n;
    cin >> n;
    vector<int> A(n), B(n);
    for (int i = 0; i < n; i++) {
        cin >> A[i];
    }
    for (int i = 0; i < n; i++) {
        cin >> B[i];
    }
    sort(B.begin(), B.end(), greater<int>());
    
    int i = 0;
    bool found = false;
    while (i < n && clock() < 1.95 * CLOCKS_PER_SEC) {
        if (A[i] == B[i]) {
            int j = getrand(i, n - 1);
            if (B[j] == B[i]) {
                j = getrand(0, i);
                if(B[j] != A[i] && B[i] != A[j]){
                    swap(B[i], B[j]);
                }
            } else {
                swap(B[i], B[j]);
            }
            i--;
        }
        i++;
        found = (i == n);
    }
    
    if (found) {
        cout << "Yes" << endl;
        for (int i = 0; i < n; i++) {
            if (i == 0) {
                cout << B[i];
            } else {
                cout << " " << B[i];
            }
            if(i == n - 1){
                cout << endl;
            }
        }
    } else {
        cout << "No" << endl;
    }
    
    
    return 0;
    
}
