func_code_string: #include <bits/stdc++.h>   using namespace std;   vector<int> edge[100005];   int visited[100005][2];   vector<int> ans;   int draw = 1;   int visit(int verId, int isPetyaTurn) {     visited[verId][isPetyaTurn] = 1;     if (edge[verId].size() == 0) {       draw = 0;       if (isPetyaTurn == 0) {         ans.push_back(verId);         return 1;       }     }     for (int i = 0; i < edge[verId].size(); ++i) {       int nextVerId = edge[verId][i];       if (visited[nextVerId][1 - isPetyaTurn] == 0 &&           visit(nextVerId, 1 - isPetyaTurn)) {         ans.push_back(verId);         return 1;       }     }     return 0;   }   int canDrawVisited[100005];   int canDraw(int verId, int step) {     if (canDrawVisited[verId] == 1) {       return 1;     }     if (step == 1000000) {       return 1;     }     canDrawVisited[verId] = 1;     for (int i = 0; i < edge[verId].size(); ++i) {       int nextVerId = edge[verId][i];       if (canDraw(nextVerId, step + 1)) {         return 1;       }     }     canDrawVisited[verId] = 0;     return 0;   }   int main() {     int n, m;     scanf( %d%d , &n, &m);     for (int i = 1; i <= n; ++i) {       int nEdge;       scanf( %d , &nEdge);       while (nEdge--) {         int tmp;         scanf( %d , &tmp);         edge[i].push_back(tmp);       }     }     int begVerId;     scanf( %d , &begVerId);     int res = visit(begVerId, 1);     if (draw) {       puts( Draw );     } else if (res) {       puts( Win );       for (int i = ans.size() - 1; i >= 0; --i) {         printf( %d%c , ans[i],    n [i == 0]);       }     } else {       int draw = canDraw(begVerId, 0);       if (draw) {         puts( Draw );       } else {         puts( Lose );       }     }     return 0;   }   