#include<iostream>
#include<algorithm>
#include<functional>
#include <string>
#include<iomanip>
#include<cstdio>
#include<math.h>
#include<stack>
#include<queue>
#include<cstring>
#include<vector>
typedef long long int ll;
#define FOR(i,a,b) for(ll i=(a);i<(b);++i)
#define REP(i,n)  FOR(i,0,n)
#define EREP(i,n) for(int i=(n-1);i>=0;--i)
#define D(n,retu) REP(i,n){cin>>retu[i];}
#define mod 1000000007
#define MIN -93193111451418101
#define INF 931931114518101
using namespace std;
typedef pair<ll, ll>P;
template<typename T>
void fill_all(T& arr, const T& v) {
	arr = v;
}
template<typename T, typename ARR>
void fill_all(ARR& arr, const T& v) {
	for (auto& i : arr) { fill_all(i, v); }
}
#define MAX_NUM 50
long long comb[MAX_NUM + 1][MAX_NUM + 1];

ll par[100000], depth[100000];
static void calc_comb()
{
	for (uint32_t i = 0; i <= MAX_NUM; i++) {
		for (uint32_t j = 0; j <= i; j++) {
			if ((j == 0) || (i == j)) {
				comb[i][j] = 1;
			}
			else {
				comb[i][j] = comb[i - 1][j - 1] + comb[i - 1][j];
			}
		}
	}
}
#define yo 100001
//------------------変数-----------------------//
string str;
ll star;
//-------------------関数----------------------//

ll Left(ll num) {
	if (!num) {
		return str.size() - 1;
	}
	return num - 1;
}

ll Right(ll num) {
	if (num == str.size() - 1) {
		return 0;
	}
	return num + 1;
}

int main() {
	ll hoge; cin >> hoge;
	cin >> str;
	star = str.size() - 2;
	REP(i, 2) {
		REP(j, 2) {
			bool flag[100101] = {};
			bool izryt = false;;
			if (i) {//starが羊の時
				flag[star] = true;
				if (str[star] == 'o') {
					if (j) { flag[Left(star)] = flag[Right(star)] = 1; izryt = true; }
					else { izryt = false; }
				}
				else {
					if (j) { flag[Left(star)] = 1; izryt = false; }
					else { flag[Right(star)] = 1; izryt = true; }
				}
			}
			else {
				if (str[star] == 'x') {
					if (j) { flag[Left(star)] = flag[Right(star)] = 1; izryt = true; }
				}
				else {
					if (j) { flag[Left(star)] = 1; }
					else { flag[Right(star)] = 1; izryt = true; }
				}
			}
			ll now = star - 1;
			while (1) {
				if (str[now] == 'o') {//隣がおなじ？
					if (flag[now]) {//同じなら（羊
						if (flag[Right(now)]) { flag[Left(now)] = 1; }
					}
					else {//嘘なら
						if (!flag[Right(now)]) { flag[Left(now)] = 1; }
					}
				}
				else {//chigau
					if (flag[now]) {//同じなら（羊
						if (!flag[Right(now)]) { flag[Left(now)] = 1; }
					}
					else {//嘘なら
						if (flag[Right(now)]) { flag[Left(now)] = 1; }
					}
				}
				if (now == 0) { break; }
				now = Left(now);
			}
			if (izryt == flag[star + 1]) {
				bool f = false;
				REP(z, str.size()) {
					now = Left(now);
					if (str[now] == 'o') {//隣がおなじ？
						if (flag[now]) {//同じなら（羊
							if (flag[Right(now)]) {
								if (!flag[Left(now)]) { f = true; break; }
							}
							else {
								if (flag[Left(now)]) { f = true; break; }
							}
						}
						else {//嘘なら
							if (!flag[Right(now)]) {
								if (!flag[Left(now)]) { f = true; break; }
							}
							else {
								if (flag[Left(now)]) { f = true; break; }
							}
						}
					}
					else {//chigau
						if (flag[now]) {//同じなら（羊
							if (!flag[Right(now)]) {
								if (!flag[Left(now)]) { f = true; break; }
							}
							else {
								if (flag[Left(now)]) { f = true; break; }
							}
						}
						else {//嘘なら
							if (flag[Right(now)]) {
								if (!flag[Left(now)]) { f = true; break; }
							}
							else {
								if (flag[Left(now)]) { f = true; break; }
							}
						}
					}
				}
				if (!f) {
					REP(k, str.size()) {
						if (flag[k]) { cout << "S"; }
						else { cout << "W"; }
					}
					cout << endl; return 0;
				}
			}
		}
	}
	cout << -1 << endl;
	return 0;
}

Measured memory_bytes: 640