#pragma GCC optimize("Ofast")
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define EPS (1e-7)
#define INF (1e9)
#define rep(i, n) for(int i = 0; i < (int)(n); i++)
#define all(x) (x).begin(),(x).end()
const double PI = acos(-1);
const ll MOD = 1000000007;
template<class T>
inline bool chmax(T &a, T b) {
    if(a < b) {
        a = b;
        return true;
    }
    return false;
}
 
template<class T>
inline bool chmin(T &a, T b) {
    if(a > b) {
        a = b;
        return true;
    }
    return false;
}
///////////////////////////////////////////////////////////////
 
int main() {
  ios::sync_with_stdio(false); cin.tie(nullptr); //入出力高速化
  int N; cin >> N;
  string s; cin >> s;

  vector<vector<char>> A(N, vector<char>(4));
  rep(i,N-2) {
    if (i == 0) {
      if (s[i] == 'o') {
        A[N-1][0] = A[0][0] = A[1][0] = A[0][1] = A[N-1][2] = A[1][3] = 'S';
        A[N-1][1] = A[1][1] = A[0][2] = A[1][2] = A[N-1][3] = A[0][3] = 'W';
      } else {
        A[N-1][0] = A[0][0] = A[1][0] = A[0][1] = A[N-1][2] = A[1][3] = 'W';
        A[N-1][1] = A[1][1] = A[0][2] = A[1][2] = A[N-1][3] = A[0][3] = 'S';
      }
    } else {
      if (s[i] == 'o') {
        rep(j,4) {
          if (A[i-1][j] == 'S' && A[i][j] == 'S') A[i+1][j] = 'S';
          if (A[i-1][j] == 'S' && A[i][j] == 'W') A[i+1][j] = 'W';
          if (A[i-1][j] == 'W' && A[i][j] == 'S') A[i+1][j] = 'W';
          if (A[i-1][j] == 'W' && A[i][j] == 'W') A[i+1][j] = 'S';
        } 
      } else {
        rep(j,4) {
          if (A[i-1][j] == 'S' && A[i][j] == 'S') A[i+1][j] = 'W';
          if (A[i-1][j] == 'S' && A[i][j] == 'W') A[i+1][j] = 'S';
          if (A[i-1][j] == 'W' && A[i][j] == 'S') A[i+1][j] = 'S';
          if (A[i-1][j] == 'W' && A[i][j] == 'W') A[i+1][j] = 'W';
        }
      }
    }
  }
  
  vector<int> c;
  if (s[N-2] == 'o') {
    rep(j,4) {
      if (A[N-3][j] == 'S' && A[N-2][j] == 'S' && A[N-1][j] == 'S') c.push_back(j);
      if (A[N-3][j] == 'S' && A[N-2][j] == 'W' && A[N-1][j] == 'W') c.push_back(j);
      if (A[N-3][j] == 'W' && A[N-2][j] == 'S' && A[N-1][j] == 'W') c.push_back(j);
      if (A[N-3][j] == 'W' && A[N-2][j] == 'W' && A[N-1][j] == 'S') c.push_back(j);
    }
  } else {
    rep(j,4) {
      if (A[N-3][j] == 'S' && A[N-2][j] == 'S' && A[N-1][j] == 'W') c.push_back(j);
      if (A[N-3][j] == 'S' && A[N-2][j] == 'W' && A[N-1][j] == 'S') c.push_back(j);
      if (A[N-3][j] == 'W' && A[N-2][j] == 'S' && A[N-1][j] == 'S') c.push_back(j);
      if (A[N-3][j] == 'W' && A[N-2][j] == 'W' && A[N-1][j] == 'W') c.push_back(j);
    }
  }
  int k = -1;
  if (c.size() != 0) {
    rep(i,c.size()) {
      bool flag = false;
      if (s[N-1] == 'o') {
        if (A[N-2][c[i]] == 'S' && A[N-1][c[i]] == 'S' && A[0][c[i]] == 'S') flag = true;
        if (A[N-2][c[i]] == 'S' && A[N-1][c[i]] == 'W' && A[0][c[i]] == 'W') flag = true;
        if (A[N-2][c[i]] == 'W' && A[N-1][c[i]] == 'S' && A[0][c[i]] == 'W') flag = true;
        if (A[N-2][c[i]] == 'W' && A[N-1][c[i]] == 'W' && A[0][c[i]] == 'S') flag = true;
      } else {
        if (A[N-2][c[i]] == 'S' && A[N-1][c[i]] == 'S' && A[0][c[i]] == 'W') flag = true;
        if (A[N-2][c[i]] == 'S' && A[N-1][c[i]] == 'W' && A[0][c[i]] == 'S') flag = true;
        if (A[N-2][c[i]] == 'W' && A[N-1][c[i]] == 'S' && A[0][c[i]] == 'S') flag = true;
        if (A[N-2][c[i]] == 'W' && A[N-1][c[i]] == 'W' && A[0][c[i]] == 'W') flag = true;
      }
      if (flag) k = c[i];
    }
  }

  if (k == -1) cout << -1 << endl;
  else {
    rep(i,N) cout << A[i][k];
    cout << endl;
  }
}

Measured memory_bytes: 5968