func_code_string: #include <bits/stdc++.h>   using namespace std;   int const bound = 1e6 + 2, N = 2e5 + 1;   long long OO = 1e18;   double eps = 1e-6;   int oo = 1e9, mod = 1e9 + 7;   int n, m, s, app[N][2];   pair<int, int> par[N][2];   vector<int> adj[N], rev[N];   queue<pair<int, int> > q;   int vis[N];   void buildpath() {     puts( Win );     int cur = s, c = 1;     while (cur != -1) {       printf( %d  , cur);       pair<int, int> ne = par[cur][c];       cur = ne.first;       c = ne.second;     }   }   bool cyc(int u) {     vis[u] = 2;     for (auto v : rev[u]) {       if (vis[v] == 2) return 1;       if (!vis[v] && cyc(v)) return 1;     }     vis[u] = 1;     return 0;   }   int main() {     scanf( %d%d , &n, &m);     for (int(i) = 1; (i) <= (n); (i)++) {       int sz;       scanf( %d , &sz);       if (!sz) {         q.push({i, 0});         app[i][0] = 1;         par[i][0] = {-1, -1};       }       while (sz--) {         int a;         scanf( %d , &a);         adj[a].push_back(i);         rev[i].push_back(a);       }     }     scanf( %d , &s);     while (!q.empty()) {       pair<int, int> cur = q.front();       q.pop();       for (auto v : adj[cur.first]) {         int cost = cur.second + 1;         int md = cost % 2;         if (app[v][md]) continue;         app[v][md] = 1;         par[v][md] = {cur.first, cur.second};         if (v == s && md) {           buildpath();           return 0;         }         q.push({v, cost % 2});       }     }     if (cyc(s)) {       puts( Draw );       return 0;     }     puts( Lose );     return 0;   }   