← Home
package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	in := bufio.NewReader(os.Stdin)
	out := bufio.NewWriter(os.Stdout)
	defer out.Flush()

	var n int
	if _, err := fmt.Fscan(in, &n); err != nil {
		return
	}

	var k1 int
	fmt.Fscan(in, &k1)
	s1 := make([]int, k1)
	for i := 0; i < k1; i++ {
		fmt.Fscan(in, &s1[i])
	}

	var k2 int
	fmt.Fscan(in, &k2)
	s2 := make([]int, k2)
	for i := 0; i < k2; i++ {
		fmt.Fscan(in, &s2[i])
	}

	degree := make([][2]int, n)
	for i := 0; i < n; i++ {
		degree[i][0] = k1
		degree[i][1] = k2
	}

	result := make([][2]int, n)

	type State struct {
		u int
		t int
	}

	queue := make([]State, 0, 2*n)

	result[0][0] = 1
	result[0][1] = 1
	queue = append(queue, State{0, 0}, State{0, 1})

	for len(queue) > 0 {
		curr := queue[0]
		queue = queue[1:]

		u := curr.u
		t := curr.t
		res := result[u][t]

		prev_t := 1 - t
		var moves []int
		if prev_t == 0 {
			moves = s1
		} else {
			moves = s2
		}

		for _, x := range moves {
			v := u - x
			for v < 0 {
				v += n
			}
			v %= n

			if result[v][prev_t] != 0 {
				continue
			}

			if res == 1 {
				result[v][prev_t] = 2
				queue = append(queue, State{v, prev_t})
			} else if res == 2 {
				degree[v][prev_t]--
				if degree[v][prev_t] == 0 {
					result[v][prev_t] = 1
					queue = append(queue, State{v, prev_t})
				}
			}
		}
	}

	for t := 0; t < 2; t++ {
		for i := 1; i < n; i++ {
			if result[i][t] == 2 {
				fmt.Fprint(out, "Win")
			} else if result[i][t] == 1 {
				fmt.Fprint(out, "Lose")
			} else {
				fmt.Fprint(out, "Loop")
			}
			if i == n-1 {
				fmt.Fprintln(out)
			} else {
				fmt.Fprint(out, " ")
			}
		}
	}
}