{-# LANGUAGE PatternSynonyms #-}

import Data.Bool   (bool)
import Data.Maybe  (fromMaybe)
import Data.Monoid (First (First, getFirst))

main :: IO ()
main = do
    _ <- getLine
    s <- getLine
    answer $ solve s

type Answer = Maybe String
answer :: Answer -> IO ()
answer = putStrLn . fromMaybe "-1"

pattern Sheep = True
pattern Wolf  = False

solve :: String -> Answer
solve s = fmap showLogic . getFirst $ foldMap (First . validate s) assumptions
  where
    showLogic = map (bool 'W' 'S')
    assumptions = reverse [[x, y] | x <- [Wolf, Sheep], y <- [Wolf, Sheep]]
    inner (x : xs) as@(aa : al : _) = bool (inner xs) id (null xs) $ ((==) (x == 'o') al == aa) : as
    validate (x : xs) as@[a2, aa] = bool Nothing (Just $ reverse ps) $ (==) (x == 'o') (a2 == am) == aa && aa == an
      where
        an : ps@(am : _) = inner xs as

