#include <bits/stdc++.h>
using namespace std;
template <typename T>
void input(T &x) {
  x = 0;
  T a = 1;
  register char c = getchar();
  for (; c < 48 || c > 57; c = getchar())
    if (c == 45) a = -1;
  for (; c >= 48 && c <= 57; c = getchar()) x = x * 10 + c - 48;
  x *= a;
  return;
}
const char a[] = "Win", b[] = "Lose", c[] = "Loop";
int f[7010], g[7010];
int Alice[7010], Bob[7010], r1[7010], r2[7010];
struct Data {
  int x, k;
  Data(int x = 0, int k = 0) : x(x), k(k) {}
};
queue<Data> q;
int main() {
  int n, k1, k2;
  input(n), input(k1);
  for (int i = 1; i <= k1; i++) input(Alice[i]);
  input(k2);
  for (int i = 1; i <= k2; i++) input(Bob[i]);
  f[1] = g[1] = 2, r1[1] = r2[1] = 2147483647;
  for (int i = 2; i <= n; i++) r1[i] = k1, r2[i] = k2;
  q.push(Data(1, 1)), q.push(Data(1, 2));
  while (!q.empty()) {
    Data x = q.front();
    q.pop();
    if (x.k == 1)
      for (int i = 1; i <= k2; i++) {
        int T = (x.x + n - Bob[i] - 1) % n + 1;
        if (g[T]) continue;
        if (f[x.x] != 1 || --r2[T] == 0) g[T] = 3 - f[x.x], q.push(Data(T, 2));
      }
    else
      for (int i = 1; i <= k1; i++) {
        int T = (x.x + n - Alice[i] - 1) % n + 1;
        if (f[T]) continue;
        if (g[x.x] != 1 || --r1[T] == 0) f[T] = 3 - g[x.x], q.push(Data(T, 1));
      }
  }
  for (int i = 2; i <= n; i++)
    printf("%s ", f[i] == 1 ? a : (f[i] == 2 ? b : c));
  puts("");
  for (int i = 2; i <= n; i++)
    printf("%s ", g[i] == 1 ? a : (g[i] == 2 ? b : c));
  fclose(stdin), fclose(stdout);
  return 0;
}
