func_code_string: #include <bits/stdc++.h>   using namespace std;   void Rd(int &res) {     res = 0;     char p;     while (p = getchar(), p <  0 )       ;     do {       res = (res << 1) + (res << 3) + (p ^ 48);     } while (p = getchar(), p >=  0 );   }   void Pt(long long x) {     if (x == 0) return;     Pt(x / 10);     putchar(x % 10 ^ 48);   }   void Ps(long long x) {     if (x < 0) {       putchar( - );       x = -x;     }     if (x == 0)       putchar( 0 );     else       Pt(x);   }   long long ans[100005];   struct W {     int x, y, id;     bool operator<(const W &a) const { return x < a.x; }   };   vector<W> son[2][100005 * 3];   bool mark[4][100005 * 3];   int n, m, k;   int id(int x, int y, int f) {     if (f == 0 || f == 3) return y - x + 100005;     return x + y + 100005;   }   void dfs(int x, int y, int f, long long t) {     int FF = id(x, y, f);     if (mark[f][FF]) return;     mark[f][FF] = 1;     if (f == 0) {       int heng = n - x, shu = m - y;       int kkk = y - x + 100005;       vector<W>::iterator it = son[0][kkk].begin();       for (; it != son[0][kkk].end(); it++) {         W op = (*it);         int mm = op.x - x;         if (ans[op.id] == -1) ans[op.id] = t + mm;       }       son[0][kkk].clear();       if (heng > shu) {         dfs(x + shu, m, 1, t + shu);       } else if (shu > heng) {         dfs(n, y + heng, 2, t + heng);       } else if (shu == heng) {         return;       }     } else if (f == 1) {       int heng = n - x, shu = y;       int kkk = x + y + 100005;       vector<W>::iterator it = son[1][kkk].begin();       for (; it != son[1][kkk].end(); it++) {         W op = (*it);         int mm = op.x - x;         if (ans[op.id] == -1) ans[op.id] = t + mm;       }       son[1][kkk].clear();       if (heng > shu) {         dfs(x + shu, 0, 0, t + shu);       } else if (shu > heng) {         dfs(n, y - heng, 3, t + heng);       } else if (shu == heng) {         return;       }     } else if (f == 2) {       int heng = x, shu = m - y;       int kkk = x + y + 100005;       vector<W>::iterator it = son[1][kkk].begin();       for (; it != son[1][kkk].end(); it++) {         W op = (*it);         int mm = x - op.x;         if (ans[op.id] == -1) ans[op.id] = t + mm;       }       son[1][kkk].clear();       if (heng > shu) {         dfs(x - shu, m, 3, t + shu);       } else if (shu > heng) {         dfs(0, y + heng, 0, t + heng);       } else if (shu == heng) {         return;       }     } else if (f == 3) {       int heng = x, shu = y;       int kkk = y - x + 100005;       vector<W>::iterator it = son[0][kkk].begin();       for (; it != son[0][kkk].end(); it++) {         W op = (*it);         int mm = x - op.x;         if (ans[op.id] == -1) ans[op.id] = t + mm;       }       son[0][kkk].clear();       if (heng > shu) {         dfs(x - shu, 0, 2, t + shu);       } else if (shu > heng) {         dfs(0, y - heng, 1, t + heng);       } else if (shu == heng) {         return;       }     }   }   int main() {     memset(ans, -1, sizeof(ans));     Rd(n), Rd(m), Rd(k);     for (int i = 1; i <= k; i++) {       int x, y;       Rd(x), Rd(y);       int tot = x + y + 100005;       son[1][tot].push_back((W){x, y, i});       tot = y - x + 100005;       son[0][tot].push_back((W){x, y, i});     }     dfs(0, 0, 0, 0);     for (int i = 1; i <= k; i++) Ps(ans[i]), puts(  );     return 0;   }   