func_code_string: #include <bits/stdc++.h>   #pragma GCC optimize( O3 )   using namespace std;   const int inf = 1000000000;   const long long INF = 1LL * inf * inf;   const long double eps = 1e-9;   const long long md = 1e9 + 7;   const long double EPS = 1e-5;   const long long maxll = std::numeric_limits<long long>::max();   const long double PI = acos(-1.0);   template <typename name>   inline name sqr(name x) {     return x * x;   }   long double log(long double base, long double n) { return log(n) / log(base); }   inline long long multmod(long long a, long long b, long long md) {     if (!a) return 0;     if (a % 2 == 1)       return (multmod(a - 1, b, md) + b) % md;     else       return sqr(multmod(a / 2, b, md)) % md;   }   template <typename name>   inline name bpow(const name &base, long long exp, const long long &md = maxll) {     if (exp == 1) return base;     if (exp % 2 == 1)       return (bpow<name>(base, exp - 1, md) * base) % md;     else {       name k = bpow<name>(base, exp / 2, md);       return (k * k) % md;     }   }   unsigned char ccc;   inline void read(int &n) {     n = 0;     bool _minus = false;     while (true) {       ccc = getchar();       if (ccc ==     || ccc ==   n ) break;       if (ccc ==  - ) {         _minus = true;         continue;       }       n = n * 10 + ccc -  0 ;     }     if (_minus) n *= -1;   }   inline void read(int &n, int &m) {     read(n);     read(m);   }   inline void read(int &n, int &m, int &k) {     read(n);     read(m);     read(k);   }   inline void read(std::string &s) {     s =   ;     while (true) {       ccc = getchar();       if (ccc ==     || ccc ==   n ) break;       s += ccc;     }   }   template <typename T1, typename T2>   inline T1 min(const T1 x, const T2 y) {     return (x > y ? y : x);   }   template <typename T1, typename T2>   inline T1 max(const T1 x, const T2 y) {     return (x < y ? y : x);   }   const int MAXN = 3e5;   int n, k[2], a[2][MAXN], cnt[2][MAXN], win[2][MAXN], lose[2][MAXN];   void solve0() {     std::vector<int> bad(0);     for (int i = 0; i < k[0]; i++) {       int x = (n - a[0][i]) % n;       win[0][x] = 1;       for (int j = 0; j < k[1]; j++) {         cnt[1][(n + x - (a[1][j])) % n]--;         if (cnt[1][(n + x - (a[1][j])) % n] == 0)           bad.push_back((n + x - (a[1][j])) % n);       }     }     while (!bad.empty()) {       std::vector<int> buff(0);       for (int x : bad) {         lose[1][x] = 1;         for (int i = 0; i < k[0]; i++) {           int y = (n + x - a[0][i]) % n;           if (!y) continue;           if (!win[0][y]) {             win[0][y] = 1;             for (int j = 0; j < k[1]; j++) {               cnt[1][(n + y - (a[1][j])) % n]--;               if (cnt[1][(n + y - (a[1][j])) % n] == 0)                 buff.push_back((n + y - (a[1][j])) % n);             }           }         }       }       bad.clear();       bad = buff;     }   }   void solve1() {     std::vector<int> bad(0);     for (int i = 0; i < k[1]; i++) {       int x = (n - a[1][i]) % n;       win[1][x] = 1;       for (int j = 0; j < k[0]; j++) {         cnt[0][(n + x - (a[0][j])) % n]--;         if (cnt[0][(n + x - (a[0][j])) % n] == 0)           bad.push_back((n + x - (a[0][j])) % n);       }     }     while (!bad.empty()) {       std::vector<int> buff(0);       for (int x : bad) {         lose[0][x] = 1;         for (int i = 0; i < k[1]; i++) {           int y = (n + x - a[1][i]) % n;           if (!win[1][y] && y) {             win[1][y] = 1;             for (int j = 0; j < k[0]; j++) {               cnt[0][(n + y - (a[0][j])) % n]--;               if (cnt[0][(n + y - (a[0][j])) % n] == 0)                 buff.push_back((n + y - (a[0][j])) % n);             }           }         }       }       bad.clear();       bad = buff;     }   }   int main() {     ((   !=   ) ? freopen(                              .dat ,                            r , stdin),      freopen(                 .sol ,               w , stdout)                 : 0);     scanf( %d , &n);     scanf( %d , &k[0]);     for (int i = 0; i < k[0]; i++) scanf( %d , &a[0][i]);     scanf( %d , &k[1]);     for (int i = 0; i < k[1]; i++) scanf( %d , &a[1][i]);     for (int i = 1; i < n; i++) cnt[0][i] = k[0], cnt[1][i] = k[1];     solve0();     solve1();     for (int i = 1; i < n; i++) {       assert(!win[0][i] || !lose[0][i]);       if (win[0][i])         cout <<  Win  ;       else if (lose[0][i])         cout <<  Lose  ;       else         cout <<  Loop  ;     }     cout <<   n ;     for (int i = 1; i < n; i++) {       assert(!win[1][i] || !lose[1][i]);       if (win[1][i])         cout <<  Win  ;       else if (lose[1][i])         cout <<  Lose  ;       else         cout <<  Loop  ;     }   }   