#include <iostream>
#include <queue>
#include <stack>
#include <cstdio>
#include <vector>
#include <map>
#include <set>
#include <bitset>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <string>
#include <sstream>
#include <time.h>
#define x first
#define y second
#define pb push_back
#define mp make_pair
#define lson l,m,rt*2
#define rson m+1,r,rt*2+1
#define mt(A,B) memset(A,B,sizeof(A))
using namespace std;
typedef long long LL;
const double PI = acos(-1);
const int N=2e5+10;
const LL mod=1e9+7;
const int inf = 0x3f3f3f3f;
const LL INF=0x3f3f3f3f3f3f3f3fLL;
char s[N],ans[N];
int flag=0,n;
void solve1(int i)
{
    if(s[i]=='o')
    {
        if(ans[i]=='S')
        {
            if(ans[1]!=ans[i-1])flag=1;
        }
        else
        {
            if(ans[1]==ans[i-1])flag=1;
        }
    }
    else
    {
        if(ans[i]=='S')
        {
            if(ans[1]==ans[i-1])flag=1;
        }
        else
        {
            if(ans[1]!=ans[i-1])flag=1;
        }
    }

}
void solve2(int i)
{
    if(s[i]=='o')
    {
        if(ans[i]=='S')
        {
            if(ans[i+1]!='\0')
            {
                if(ans[i+1]!=ans[i-1])flag=1;
            }
            else
            {
                ans[i+1]=ans[i-1];
            }
        }
        else
        {
            if(ans[i+1]!='\0')
            {
                if(ans[i+1]==ans[i-1])flag=1;
            }
            else
            {
                if(ans[i-1]=='S')ans[i+1]='W';
                else ans[i+1]='S';
            }
        }
    }
    else
    {
        if(ans[i]=='S')
        {
            if(ans[i+1]!='\0')
            {
                if(ans[i+1]==ans[i-1])flag=1;
            }
            else
            {
                if(ans[i-1]=='S')ans[i+1]='W';
                else ans[i+1]='S';

            }
        }
        else
        {
            if(ans[i+1]!='\0')
            {
                if(ans[i+1]!=ans[i-1])flag=1;
            }
            else
            {
                 ans[i+1]=ans[i-1];
            }
        }
    }
    //cout<<1<<" "<<ans[1]<<endl;
    //cout<<i<<" "<<ans[i-1]<<" "<<ans[i]<<" "<<ans[i+1]<<" "<<s[i]<<endl;
}
void solve3(int type,int i)//'S'
{
    if(type==1)
    {
        if(s[i]=='o')
        {
            ans[n]='S';
            ans[i+1]='S';
        }
        else
        {
            ans[n]='S';
            ans[i+1]='W';
        }
    }
    else if(type==2)
    {
        if(s[i]=='o')
        {
            ans[n]='W';
            ans[i+1]='W';
        }
        else
        {
            ans[n]='S';
            ans[i+1]='W';
        }
    }
    else if(type==3)
    {
        if(s[i]=='o')
        {
            ans[n]='W';
            ans[i+1]='W';
        }
        else
        {
            ans[n]='W';
            ans[i+1]='S';
        }
    }
    else if(type==4)
    {
        if(s[i]=='o')
        {
            ans[n]='S';
            ans[i+1]='S';
        }
        else
        {
            ans[n]='W';
            ans[i+1]='S';
        }
    }
}
void solve4(int type,int i)
{
    if(type==1)
    {
        if(s[i]=='x')
        {
            ans[n]='S';
            ans[i+1]='S';
        }
        else
        {
            ans[n]='S';
            ans[i+1]='W';
        }
    }
    else if(type==2)
    {
        if(s[i]=='x')
        {
            ans[n]='W';
            ans[i+1]='W';
        }
        else
        {
            ans[n]='S';
            ans[i+1]='W';
        }
    }
    else if(type==3)
    {
        if(s[i]=='x')
        {
            ans[n]='W';
            ans[i+1]='W';
        }
        else
        {
            ans[n]='W';
            ans[i+1]='S';
        }
    }
    else if(type==4)
    {
        if(s[i]=='x')
        {
            ans[n]='S';
            ans[i+1]='S';
        }
        else
        {
            ans[n]='W';
            ans[i+1]='S';
        }
    }
}
int main()
{
#ifdef Local
    freopen("data.txt","r",stdin);
#endif
    ios::sync_with_stdio(false);
    cin.tie(0);
    int h;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>s[i];
    }
    for(int j=1; j<=4; j++)
    {

        mt(ans,0);
        ans[1]='S';
        flag=0;
        for(int i=1;i<=n;i++)
        {
            if(i==1)solve3(j,i);
            else if(i==n)solve1(i);
            else solve2(i);
            //cout<<flag<<" ";
        }
        //cout<<endl;
        if(!flag)break;
    }
    if(!flag)
    {
        for(int i=1; i<=n; i++)cout<<ans[i];
        return 0;
    }
    for(int j=1; j<=4; j++)
    {
        mt(ans,0);
        ans[1]='W';

        flag=0;
        for(int i=1;i<=n;i++)
        {
            if(i==1)solve4(j,i);
            else if(i==n)solve1(i);
            else solve2(i);
        }
        if(!flag)break;
    }
    if(!flag)
    {
        for(int i=1; i<=n; i++)cout<<ans[i];
        return 0;
    }
    if(flag)cout<<-1<<endl;
#ifdef Local
    cerr << "time: " << (LL) clock() * 1000 / CLOCKS_PER_SEC << " ms" << endl;
#endif
}
/*char s[40];
int ans=0;
int vis[4][4][4];
int dx[6]={1,-1,0,0,0,0};
int dy[6]={0,0,1,-1,0,0};
int dz[6]={0,0,0,0,1,-1};
bool check(int x,int y,int z)
{
    if(x<1||x>3||y<1||y>3||z<1||z>3||vis[x][y][z])return false;
    else return true;
}
void dfs(int cur,int x,int y,int z,int fx)
{
    vis[x][y][z]=1;
    if(cur==27)
    {
        ans++;
        return;
    }
    if(s[cur]=='I')
    {
        int X,Y,Z;
        X=x+dx[fx];
        Y=y+dy[fx];
        Z=z+dz[fx];
        if(check(X,Y,Z))dfs(cur+1,X,Y,Z,fx);
    }
    else
    {
        for(int i=0;i<6;i++)
        {
            if(i==fx)continue;
            int X,Y,Z;
            X=x+dx[fx];
            Y=y+dy[fx];
            Z=z+dz[fx];
            if(check(X,Y,Z))dfs(cur+1,X,Y,Z,i);
        }
    }
    vis[x][y][z]=0;
}*/
/*mt(vis,0);
    scanf("%s",s+1);
    for(int i=1;i<=3;i++)
    {
        for(int j=1;j<=3;j++)
        {
            for(int k=1;k<=3;k++)
            {
                dfs(1,i,j,k,-1);
            }
        }
    }
    if(ans)puts("YES");
    else puts("NO");*/


Measured memory_bytes: 640