func_code_string: #include <bits/stdc++.h>   using namespace std;   const int MAX_N = 2e5;   vector<int> gr[MAX_N];   int indx(int h, int t) { return h * 450 + t; }   int win = 1e9;   int lose = 0;   bool draw = false;   int used[MAX_N] = {0};   void bfs(int st_indx) {     queue<pair<int, int>> q;     q.push({0, st_indx});     used[st_indx] = 1;     while (!q.empty()) {       auto [d, v] = q.front();       q.pop();       if (v == 0) {         win = min(win, d);       }       for (auto e : gr[v]) {         if (!used[e]) {           used[e] = 1;           q.push({d + 1, e});         }       }     }   }   void dfs(int v) {     used[v] = 1;     for (auto e : gr[v]) {       if (used[e] == 1) {         draw = true;       } else if (!used[e]) {         dfs(e);       }     }     used[v] = 2;   }   int d[MAX_N];   void dij(int st) {     fill(d, d + MAX_N, 1e9);     set<pair<int, int>> s;     d[st] = 0;     s.insert({0, st});     while (!s.empty()) {       int v = s.begin()->second;       if (gr[v].empty()) {         lose = max(lose, -d[v]);       }       s.erase(s.begin());       for (auto e : gr[v]) {         if (d[e] > d[v] - 1) {           s.erase({d[e], e});           d[e] = d[v] - 1;           s.insert({d[e], e});         }       }     }   }   int main() {     ios_base::sync_with_stdio(false);     cin.tie(nullptr);     int h, t, r, n;     cin >> h >> t >> r >> n;     vector<pair<int, int>> a(n + 1);     for (int i = 1; i <= n; ++i) {       cin >> a[i].first >> a[i].second;     }     int m;     cin >> m;     vector<pair<int, int>> b(m + 1);     for (int i = 1; i <= m; ++i) {       cin >> b[i].first >> b[i].second;     }     for (int h1 = 0; h1 <= r; ++h1) {       for (int t1 = 0; t1 <= r; ++t1) {         if (h1 + t1 > r || !(h1 + t1)) {           continue;         }         for (int chop_h = 1; chop_h <= min(h1, n); ++chop_h) {           int h2 = h1 - chop_h + a[chop_h].first;           int t2 = t1 + a[chop_h].second;           gr[indx(h1, t1)].push_back(indx(h2, t2));         }         for (int chop_t = 1; chop_t <= min(t1, m); ++chop_t) {           int h2 = h1 + b[chop_t].first;           int t2 = t1 - chop_t + b[chop_t].second;           gr[indx(h1, t1)].push_back(indx(h2, t2));         }       }     }     bfs(indx(h, t));     memset(used, 0, sizeof(used));     dfs(indx(h, t));     if (win != 1e9) {       cout <<  Ivan n  << win;     } else if (draw) {       cout <<  Draw ;     } else {       dij(indx(h, t));       cout <<  Zmey n  << lose;     }     return 0;   }   