#include <iostream>
#include <iomanip>
#include <stdio.h>
#include <set>
#include <vector>
#include <map>
#include <cmath>
#include <algorithm>
#include <memory.h>
#include <string>
#include <sstream>
#include <cstdlib>
#include <ctime>
#include <cassert>

using namespace std;

typedef long long LL;
typedef pair<int,int> PII;

#define MP make_pair
#define PB push_back
#define FF first
#define SS second

#define FORN(i, n) for (int i = 0; i <  (int)(n); i++)
#define FOR1(i, n) for (int i = 1; i <= (int)(n); i++)
#define FORD(i, n) for (int i = (int)(n) - 1; i >= 0; i--)

#define DEBUG(X) { cout << #X << " = " << (X) << endl; }
#define PR0(A,n) { cout << #A << " = "; FORN(_,n) cout << A[_] << ' '; cout << endl; }

// #define FL fflush(stdout)

#define MOD 1000000007
#define INF 2000000000
#define MAXN 100005

int GLL(LL& x) {
  return scanf("%lld", &x);
}

int GI(int& x) {
  return scanf("%d", &x);
}

int n; string s, output;
int answers[MAXN], animals[MAXN];

void printans() {
  FORN(i, n) {
    if (animals[i]) printf("W");
    else printf("S");
  }
  printf("\n");
}

void pr() {
  FORN(i, n) { printf("%d ", answers[i]); }
  printf("\n");
  FORN(i, n) {
    if (animals[i] == 1) printf("W ");
    else if (animals[i] == -1) printf("  ");
    else printf("S ");
  }
  printf("\n");
}

bool traverse(bool a1, bool a2) {
  FORN(i, n) animals[i] = -1;

  int idx, left, right;
  // start from position 0
  idx = 0;
  left = n - 1;
  right = idx + 1;

  animals[idx] = a1;

  // a1 = wolf  = 1, answers = 1, left = a2, right = ~a2
  // a1 = wolf  = 1, answers = 0, left = right = a2
  // a1 = sheep = 0, answers = 1, left = right = a2
  // a1 = sheep = 0, answers = 0, left = a2, right = ~a2
  if (a1 ^ answers[idx]) {
    animals[left] = animals[right] = a2;
  } else {
    assert(a1 == answers[idx]);
    animals[left] = a2;
    animals[right] = !a2;
  }

  right++;

  while (right < n - 1) {
//    printf("  left[%d] %d, answer %d\n", right-2, animals[right-2], answers[right-2]);
//    printf("center[%d] %d, answer %d\n", right-1, animals[right-1], answers[right-1]);
//    printf(" right[%d] %d, answer %d\n", right, animals[right], answers[right]);
    if (animals[right-1] ^ answers[right-1]) {
      animals[right] = animals[right-2];
    } else {
      animals[right] = !animals[right-2];
    }
    right++;
  }

  bool ret = true;
//  pr();
  FORN(i, n) {
    if (i==0) {left = n-1; right = i + 1;}
    else if (i==n-1) {left = i-1; right = 0;}
    else {left = i-1; right = i+1;}
    if (animals[i] ^ answers[i]) {
      ret &= (animals[left] == animals[right]);
//      printf("comparing [%d]%d, [%d]%d\n", left, animals[left], right, animals[right]);
    } else {
      ret &= (animals[left] == !animals[right]);
//      printf("comparing [%d]%d, [%d]%d\n", left, animals[left], right, !animals[right]);
    }
  }
  return ret;

//  printf("checking predicted last[%d] %d with animals[%d]: %d\n", right, last, n-1, animals[n-1]);
//  if (last == animals[n-1]) return true;
//  else return false;

}

int main() {
  GI(n);
  cin >> s;

  // short circuit for easy cases
  if (s.find('o') == -1) {
    output.resize(n, 'W');
    printf("%s\n", output.c_str());
    return 0;
  }
  if (s.find('x') == -1) {
    output.resize(n, 'S');
    printf("%s\n", output.c_str());
    return 0;
  }

  FORN(i, n) answers[i] = (s[i] == 'o'); // yes = o, no = x
//  printf("answers: "); FORN(i, n) printf("%c ", s[i]); printf("\n");
//  printf("answers: "); FORN(i, n) printf("%d ", answers[i]); printf("\n");

  if (traverse(1, 1)) {printans(); return 0;}
  if (traverse(1, 0)) {printans(); return 0;}
  if (traverse(0, 1)) {printans(); return 0;}
  if (traverse(0, 0)) {printans(); return 0;}
  printf("-1\n"); return 0;
}


Measured memory_bytes: 1408