func_code_string: #include <bits/stdc++.h>   using namespace std;   int n, m;   const int maxn = 1e5 + 3;   int terminal[maxn];   struct spe {     int next, to;   };   spe edge[maxn << 1];   int head[maxn];   int visit[maxn][3];   int cnt = 1, tpoint = -1;   int nxt[maxn][2];   bool dp[maxn][3];   int cir = 0;   bool dfs(int s, int val) {     if (terminal[s] == 1) {       tpoint = s;       return val == 1;     }     if (visit[s][val] == 2) return dp[s][val];     bool temp = false;     visit[s][val] = 1;     for (int i = head[s]; i != -1; i = edge[i].next) {       int t = edge[i].to;       if (visit[t][!val] == 1) {         cir = 1;         continue;       }       if (dfs(t, !val) == true) {         nxt[s][val] = t;         temp = true;       }     }     visit[s][val] = 2;     dp[s][val] = temp;     return temp;   }   int main() {     memset(dp, 0, sizeof dp);     memset(visit, 0, sizeof visit);     memset(head, -1, sizeof head);     memset(edge, 0, sizeof edge);     memset(terminal, 0, sizeof terminal);     scanf( %d %d , &n, &m);     for (int i = 1; i <= n; i++)       for (int j = 0; j <= 1; j++) nxt[i][j] = i;     int counter = 0;     for (int i = 1; i <= n; i++) {       int k, item;       scanf( %d , &k);       if (k == 0) counter++, terminal[i] = 1;       while (k--) {         scanf( %d , &item);         edge[cnt].to = item;         edge[cnt].next = head[i];         head[i] = cnt++;       }     }     int start;     scanf( %d , &start);     bool ans = dfs(start, 0);     if (ans == true) {       printf( Win n );       int j = 0;       printf( %d , start);       while (nxt[start][j] != start) {         start = nxt[start][j];         j = !j;         printf(  %d , start);       }       printf(  n );     } else if (cir == 1)       printf( Draw n );     else       printf( Lose n );     return 0;   }   