func_code_string: #include <bits/stdc++.h>   using namespace std;   using big = long long;   const int N = 200200;   int a[N];   int f[N][2][2][2][2];   int dfs(int n, int x, int y, int v1, int v2) {     if (!n) {       assert(!x && !y);       return v1 > v2;     }     if (x && !dfs(n - 1, x - 1, y, v2, !v1)) {       return true;     }     if (y && !dfs(n - 1, x, y - 1, v2, v1)) {       return true;     }     return false;   }   vector<int> to_vec(int x, int y) { return {x % 4, y % 4}; }   map<vector<int>, int> init() {     map<vector<int>, int> g;     vector<vector<int>> ans;     for (int n = 1; n <= 16; ++n) {       for (int x = 1; x <= n; x += 2) {         int y = n - x;         int res = dfs(n, x, y, 0, 0);         if (g.count(to_vec(x, y)) && g[to_vec(x, y)] != res) {           cerr <<   ERRRR    << endl;         }         assert(!g.count(to_vec(x, y)) || g[to_vec(x, y)] == res);         g[to_vec(x, y)] = res;         ans.push_back({x, y, res});       }     }     return g;   }   int main() {     ios_base::sync_with_stdio(false);     auto g = init();     int cas;     cin >> cas;     memset(f, -1, sizeof(f));     while (cas--) {       int n;       cin >> n;       int s = 0;       for (int i = 0; i < n; ++i) {         cin >> a[i];         s ^= a[i];       }       int highest = 0;       for (int i = 0; (1ll << i) <= s; ++i) {         highest = i;       }       int cnt = 0;       for (int i = 0; i < n; ++i) {         if (a[i] >> highest & 1) {           ++cnt;         }       }       int other = n - cnt;       if (!s) {         cout <<  DRAW               <<   n ;       } else {         assert(cnt & 1);         if (g[to_vec(cnt, other)]) {           cout <<  WIN                 <<   n ;         } else {           cout <<  LOSE                 <<   n ;         }       }     }     return 0;   }   