Problem:
Score : 500 points

Problem Statement

Snuke, who loves animals, built a zoo.

There are N animals in this zoo. They are conveniently numbered 1 through N, and arranged in a circle.
The animal numbered i (2≤i≤N-1) is adjacent to the animals numbered i-1 and i+1. Also, the animal numbered 1 is adjacent to the animals numbered 2 and N, and the animal numbered N is adjacent to the animals numbered N-1 and 1.

There are two kinds of animals in this zoo: honest sheep that only speak the truth, and lying wolves that only tell lies.

Snuke cannot tell the difference between these two species, and asked each animal the following question: "Are your neighbors of the same species?" The animal numbered i answered s_i. Here, if s_i is o, the animal said that the two neighboring animals are of the same species, and if s_i is x, the animal said that the two neighboring animals are of different species.

More formally, a sheep answered o if the two neighboring animals are both sheep or both wolves, and answered x otherwise.
Similarly, a wolf answered x if the two neighboring animals are both sheep or both wolves, and answered o otherwise.

Snuke is wondering whether there is a valid assignment of species to the animals that is consistent with these responses. If there is such an assignment, show one such assignment. Otherwise, print -1.

Constraints

3 ≤ N ≤ 10^{5}

s is a string of length N consisting of o and x.

Input

The input is given from Standard Input in the following format:

N
s

Output

If there does not exist an valid assignment that is consistent with s, print -1.
Otherwise, print an string t in the following format. The output is considered correct if the assignment described by t is consistent with s.

t is a string of length N consisting of S and W.

If t_i is S, it indicates that the animal numbered i is a sheep. If t_i is W, it indicates that the animal numbered i is a wolf.

Sample Input 1

6
ooxoox

Sample Output 1

SSSWWS

For example, if the animals numbered 1, 2, 3, 4, 5 and 6 are respectively a sheep, sheep, sheep, wolf, wolf, and sheep, it is consistent with their responses. Besides, there is another valid assignment of species: a wolf, sheep, wolf, sheep, wolf and wolf.

Let us remind you: if the neiboring animals are of the same species, a sheep answers o and a wolf answers x. If the neiboring animals are of different species, a sheep answers x and a wolf answers o.

Sample Input 2

3
oox

Sample Output 2

-1

Print -1 if there is no valid assignment of species.

Sample Input 3

10
oxooxoxoox

Sample Output 3

SSWWSSSWWS

Solution in Go (1.6) (judge verdict: Runtime Error)

package main

import (
	"bufio"
	"os"
	"strconv"
)

var (
	N        int
	S        string
	patterns [4]string = [4]string{"SS", "SW", "WS", "WW"}
	sheep    []bool
	strings  []bool
)

func readVariables() {
	N, S = nextInt(), nextStr()
	sheep = make([]bool, N)
	strings = make([]bool, N)
	// for i := 0; i < N; i++ {
	// fmt.Println(S[i])
	// strings[i] = string(S[i]) == "o"
	// }
}

func main() {
	readVariables()
	// var c int
	// // fmt.Println(strings)
	// for _, v := range patterns {
	// 	sheep[0] = string(v[0]) == "S"
	// 	sheep[N-1] = string(v[1]) == "S"
	// 	sheep[1] = g(sheep[N-1], sheep[0], strings[0])
	// 	// fmt.Println(sheep[1], g(sheep[N-1], sheep[0], strings[0]), sheep[N-1], sheep[0], strings[0])
	// 	for i := 2; i < N-1; i++ {
	// 		sheep[i] = g(sheep[i-2], sheep[i-1], strings[i-1])
	// 	}
	// 	ok1 := sheep[N-1] == g(sheep[N-3], sheep[N-2], strings[N-2])
	// 	ok2 := sheep[0] == g(sheep[N-2], sheep[N-1], strings[N-1])
	// 	if ok1 && ok2 {
	// 		// fmt.Println(sheep)
	// 		break
	// 	}
	// 	c++
	// }
	// // fmt.Println(c)
	// if c < 4 {
	// 	for _, v := range sheep {
	// 		if v {
	// 			fmt.Print("S")
	// 		} else {
	// 			fmt.Print("W")
	// 		}
	// 	}
	// 	fmt.Println()
	// } else {
	// 	fmt.Println(-1)
	// }
}

func g(left, center, saysSame bool) bool {
	same := center && saysSame || !center && !saysSame
	if same {
		return left
	} else {
		return !left
	}
}

/* 以下、テンプレート*/

var scanner *bufio.Scanner

func init() {
	scanner = bufio.NewScanner(os.Stdin)
	scanner.Split(bufio.ScanWords)
}

//nextInt converts next token from stdin and returns integer value.
//nextInt panics when conversion into an integer fails.
func nextInt() int {
	if !scanner.Scan() {
		panic("No more token.")
	}
	num, err := strconv.Atoi(scanner.Text())
	if err != nil {
		panic("nextInt(): cannot convert to int: " + scanner.Text())
	}
	return num
}

func nextStr() string {
	if !scanner.Scan() {
		panic("No more token.")
	}
	return scanner.Text()
}