#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<vector>
#include<functional>
#include<algorithm>
#include<stdlib.h>
#include<string>
#include<string.h>
#define _USE_MATH_DEFINES
#include<math.h>
#include<deque>
#include<set>
#include<map>
#include<queue>
#include<list>
#include<iostream>
#include <bitset>
using namespace std;
typedef long long ll;
#define rep(i,a,b) for(auto i=a;i<b;i++)
#define rep2(i, a)for(auto i : a)
#define all(_x) _x.begin(), _x.end()
#define r_sort(_x) sort(_x, std::greater<int>())
#define vec_cnt(_a, _n) (upper_bound(all(_a), _n) - lower_bound(all(_a), _n))
#define vec_unique(_a) _a.erase(std::unique(all(_a)), _a.end());
#define vvec vector<vector<ll>>
ll gcd(ll a, ll b) { return a % b == 0 ? b : gcd(b, a % b); }
ll lcm(ll a, ll b) { return (a / gcd(a, b)) * b; }
#define INF 1 << 30
const int mod = 1000000007;
ll power(ll x, ll p) { ll a = 1; while (p > 0) { if (p % 2 == 0) { x *= x; p /= 2; } else { a *= x; p--; } }return a; }
ll mpower(ll x, ll p) { ll a = 1; while (p > 0) { if (p % 2 == 0) { x = x * x % mod; p /= 2; } else { a = a * x % mod; p--; } }return a; }
ll co(ll n, ll k) { ll a = 1; rep(i, 1, k) { a *= n - i + 1; a /= i; }return a; }
ll mc(ll n, ll m) { ll k = 1, l = 1; rep(i, n - m + 1, n + 1) k = k * i % mod; rep(i, 1, m + 1) l = l * i % mod; l = mpower(l, mod - 2); return k * l % mod; }

int main()
{
	int n;
	string s, t, str[4] = {"SS", "SW", "WS", "WW"};
	cin >> n >> s;
	t.resize(s.size());
	//t[s.size()] = 0;
	rep(_i, 0, 4) {
		t[0] = str[_i][0];
		t[1] = str[_i][1];
		rep(i, 1, s.size() + 1) {
			t[(i+1) % s.size()] = ((s[i % s.size()] == 'o') ^ (t[(i-1) % s.size()] == 'S') ^ (t[i % s.size()] == 'S')) ? 'S' : 'W';
		}
		if (t[0] == str[_i][0] && t[1] == str[_i][1]) {
			puts(t.c_str());
			return 0;
		}
	}
	puts("-1");
	return 0;
}
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 100005;

int n;
string s;

bool val = false;
bitset<N> ans;

int main() {
    cin.sync_with_stdio(0); cin.tie(0);
    cin >> n >> s;
    int variations[4][2] = {{0, 1}, {0, 0}, {1, 0}, {1, 1}};

    for (int v = 0; v < 4; ++v) {
        ans.reset();
        ans[0] = variations[v][0];
        ans[1] = variations[v][1];

        for (int i = 1; i < n - 1; ++i) {
            if (!ans[i]) {
                if (s[i] == 'o') ans[i + 1] = ans[i - 1];
                else ans[i + 1] = !ans[i - 1];
            } else {
                if (s[i] == 'o') ans[i + 1] = !ans[i - 1];
                else ans[i + 1] = ans[i - 1];
            }
        }

        bool good = true;
        if (ans[n - 1]) {
            if (s[n - 1] == 'o' && ans[n - 2] == ans[0]) {
                good = false;
            } else if (s[n - 1] == 'x' && ans[n - 2] != ans[0]) {
                good = false;
            }
        } else {
            if (s[n - 1] == 'o' && ans[n - 2] != ans[0]) {
                good = false;
            } else if (s[n - 1] == 'x' && ans[n - 2] == ans[0]) {
                good = false;
            }
        }

        if (ans[0]) {
            if (s[0] == 'o' && ans[1] == ans[n - 1]) {
                good = false;
            } else if (s[0] == 'x' && ans[1] != ans[n - 1]) {
                good = false;
            }
        } else {
            if (s[0] == 'o' && ans[1] != ans[n - 1]) {
                good = false;
            } else if (s[0] == 'x' && ans[1] == ans[n - 1]) {
                good = false;
            }
        }

        if (good) {
            val = true;
            break;
        }
    }

    if (!val) {
        cout << -1;
        return 0;
    }

    for (int i = 0; i < n; ++i) {
        if (!ans[i]) cout << 'S';
        else cout << 'W';
    }
}
