func_code_string: #include <bits/stdc++.h>   const int INF = 0x3f3f3f3f;   const long long LINF = 0x3f3f3f3f3f3f3f3fll;   using namespace std;   const double eps = 1e-6;   const long long mod = 1e9 + 7;   const int maxn = 1e5 + 100;   const int maxe = 1e6 + 100;   struct node {     int to;     int next;   };   bool dp[maxn][2], cir;   vector<int> V[maxn];   int vis[maxn][2];   int Next[maxn][2], n, m;   inline bool dfs(int x, int s) {     if (!V[x].size()) return s == 1;     if (vis[x][s] == 2) return dp[x][s];     vis[x][s] = 1;     bool t = 0;     for (int i = 0; i < V[x].size(); i++) {       int v = V[x][i];       if (vis[v][s ^ 1] == 1) {         cir = 1;         continue;       }       if (dfs(v, s ^ 1)) {         t = 1;         Next[x][s] = v;       }     }     vis[x][s] = 2;     return dp[x][s] = t;   }   inline void print(int x, int s) {     printf( %d  , x);     if (Next[x][s]) {       print(Next[x][s], s ^ 1);     }   }   void Solve() {     cin >> n >> m;     int xx, v;     for (int i = 1; i <= n; i++) {       cin >> xx;       for (int j = 0; j < xx; j++) {         cin >> v;         V[i].push_back(v);       }     }     int st;     cin >> st;     if (dfs(st, 0)) {       puts( Win );       print(st, 0);     } else if (cir)       puts( Draw );     else       puts( Lose );   }   int main() {     int Case = 1, cases;     while (Case--) {       Solve();     }     return 0;   }   