#include <algorithm>
#include <cfloat>
#include <climits>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <functional>
#include <iostream>
#include <map>
#include <memory>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <utility>
#include <vector>

using namespace std;

typedef long long ll;

#define sz size()
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define all(c) (c).begin(), (c).end()
#define rep(i,a,b) for(ll i=(a);i<(b);++i)
#define per(i,a,b) for(ll i=(b-1);i>=(a);--i)
#define clr(a, b) memset((a), (b) ,sizeof(a))
#define ctos(c) string(1,c)
#define print(x) cout<<#x<<" = "<<x<<endl;

#define MOD 1000000007

ll dp[100100][2][2][2][2];

string dps[2][2][2][2];

void f(string s){
	rep(i,0,s.sz-1){
		cout << s[i];
	}
	cout << endl;
}

int main() {
	ll n;
	cin >> n;
	string s;
	cin >> s;
	clr(dp, -1);
	if (s[1] == 'o') {
		// sheep
		dp[2][0][0][0][0] = 1;
		dps[0][0][0][0] = "SSS";
		dp[2][1][0][0][1] = 1;
		dps[1][0][0][1] = "WSW";
		// wolf
		dp[2][1][1][1][0] = 1;
		dps[1][1][1][0] = "WWS";
		dp[2][0][1][1][1] = 1;
		dps[0][1][1][1] = "SWW";
	}
	else {
		// sheep
		dp[2][1][0][0][0] = 1;
		dps[1][0][0][0] = "WSS";
		dp[2][0][0][0][1] = 1;
		dps[0][0][0][1] = "SSW";
		// wolf
		dp[2][1][1][1][1] = 1;
		dps[1][1][1][1] = "WWW";
		dp[2][0][1][1][0] = 1;
		dps[0][1][1][0] = "SWS";
	}
	rep(i, 3, n + 1) {
		rep(j, 0, 2) {
			rep(j2, 0, 2) {
				rep(k, 0, 2) {
					rep(l, 0, 2) {
						if (s[i - 1] == 'o') {
							if (l == 0) {
								if (dp[i][j][j2][l][k] == -1 && dp[i - 1][j][j2][k][l] != -1) {
									dp[i][j][j2][l][k] = dp[i - 1][j][j2][k][l];
									if (k == 0)dps[j][j2][l][k] = dps[j][j2][k][l] + "S";
									else dps[j][j2][l][k] = dps[j][j2][k][l] + "W";
								}
							}
							else {
								if (dp[i][j][j2][l][1 - k] == -1 && dp[i - 1][j][j2][k][l] != -1) {
									dp[i][j][j2][l][1 - k] = dp[i - 1][j][j2][k][l];
									if (1 - k == 0)dps[j][j2][l][1 - k] = dps[j][j2][k][l] + "S";
									else dps[j][j2][l][1 - k] = dps[j][j2][k][l] + "W";
								}
							}
						}
						else {
							if (l == 1) {
								if (dp[i][j][j2][l][k] == -1 && dp[i - 1][j][j2][k][l] != -1) {
									dp[i][j][j2][l][k] = dp[i - 1][j][j2][k][l];
									if (k == 0)dps[j][j2][l][k] = dps[j][j2][k][l] + "S";
									else dps[j][j2][l][k] = dps[j][j2][k][l] + "W";
								}
							}
							else {
								if (dp[i][j][j2][l][1 - k] == -1 && dp[i - 1][j][j2][k][l] != -1) {
									dp[i][j][j2][l][1 - k] = dp[i - 1][j][j2][k][l];
									if (1 - k == 0)dps[j][j2][l][1 - k] = dps[j][j2][k][l] + "S";
									else dps[j][j2][l][1 - k] = dps[j][j2][k][l] + "W";
								}
							}
						}
					}
				}
			}
		}
	}
	rep(i, 0, 2) {
		rep(j, 0, 2) {
			rep(k, 0, 2) {
				if (s[0] == 'o') {
					// sheep
					if (i == 0 && j == k && dp[n][i][j][k][i] == 1) {
						f(dps[i][j][k][i]);
						return 0;
					}
					// wolf
					if (i == 1 && j != k && dp[n][i][j][k][i] == 1) {
						f(dps[i][j][k][i]);
						return 0;
					}
				}
				else {
					// sheep
					if (i == 0 && j != k && dp[n][i][j][k][i] == 1) {
						f(dps[i][j][k][i]);
						return 0;
					}
					// wolf
					if (i == 1 && j == k && dp[n][i][j][k][i] == 1) {
						f(dps[i][j][k][i]);
						return 0;
					}
				}
			}
		}
	}
	cout << -1 << endl;
	return 0;
}


Measured memory_bytes: 16468