func_code_string: #include <bits/stdc++.h>   using namespace std;   const int inf = 2000000000;   int H, T, R, m, hi[205], ti[205], n, hj[205], tj[205], h[205][205],       t[3000000][3], w, d[205][205];   void adde(int x, int y, int X, int Y) {     t[w][0] = X;     t[w][1] = Y;     t[w][2] = h[x][y];     h[x][y] = w++;   }   struct node {     int x, y, d;     bool operator<(const node &t) const { return d > t.d; }   } temp;   priority_queue<node> q;   bool dij() {     for (int i = 0; i <= 200; i++)       for (int j = 0; j <= 200; j++) d[i][j] = inf;     d[H][T] = 0;     temp.x = H;     temp.y = T;     temp.d = d[H][T];     q.push(temp);     while (!q.empty()) {       temp = q.top();       q.pop();       int x = temp.x, y = temp.y;       if (temp.d == d[x][y]) {         for (int i = h[x][y]; i != -1; i = t[i][2]) {           int X = t[i][0], Y = t[i][1];           if (d[x][y] + 1 < d[X][Y]) {             d[X][Y] = d[x][y] + 1;             temp.x = X;             temp.y = Y;             temp.d = d[X][Y];             q.push(temp);           }         }       }     }     return d[0][0] != inf;   }   bool spfa() {     int q[21010][2], rq, wq, g[205][205];     bool b[205][205];     for (int i = 0; i <= 200; i++)       for (int j = 0; j <= 200; j++) d[i][j] = 0;     rq = wq = 0;     q[wq][0] = H;     q[wq][1] = T;     wq++;     memset(g, 0, sizeof(g));     g[H][T]++;     memset(b, true, sizeof(b));     b[H][T] = false;     while (wq--) {       int x = q[wq][0], y = q[wq][1];       b[x][y] = true;       for (int i = h[x][y]; i != -1; i = t[i][2]) {         int X = t[i][0], Y = t[i][1];         if (d[x][y] + 1 > d[X][Y]) {           d[X][Y] = d[x][y] + 1;           if (b[X][Y]) {             g[X][Y]++;             if (g[X][Y] > 21000) return true;             b[X][Y] = false;             q[wq][0] = X;             q[wq][1] = Y;             wq++;           }         }       }     }     return false;   }   int main() {     scanf( %d%d%d , &H, &T, &R);     scanf( %d , &m);     for (int i = 1; i <= m; i++) {       scanf( %d%d , &hi[i], &ti[i]);       hi[i] -= i;     }     scanf( %d , &n);     for (int i = 1; i <= n; i++) {       scanf( %d%d , &hj[i], &tj[i]);       tj[i] -= i;     }     memset(h, -1, sizeof(h));     w = 0;     for (int i = 0; i <= R; i++) {       for (int j = 0; i + j <= R; j++) {         for (int k = 1; (k <= m) && (k <= i); k++)           if (i + hi[k] + j + ti[k] > R)             adde(i, j, 200, 200);           else             adde(i, j, i + hi[k], j + ti[k]);         for (int k = 1; (k <= n) && (k <= j); k++)           if (i + hj[k] + j + tj[k] > R)             adde(i, j, 200, 200);           else             adde(i, j, i + hj[k], j + tj[k]);       }     }     if (dij())       printf( Ivan n%d n , d[0][0]);     else if (spfa())       printf( Draw n );     else       printf( Zmey n%d n , d[200][200]);     return 0;   }   