func_code_string: #include <bits/stdc++.h>   using namespace std;   vector<pair<int, int> > seg[2];   int n, m, k, x, y, dX, dY;   bool flag = 0;   long long ans;   void add(int tx, int ty) {     seg[0].push_back(pair<int, int>(tx - ty, tx));     seg[1].push_back(pair<int, int>(tx + ty, tx));   }   void reflect() {     int fc;     if (dX == dY)       fc = 0;     else       fc = 1;     pair<int, int> p = (fc) ? pair<int, int>(x + y, x) : pair<int, int>(x - y, x);     vector<pair<int, int> >::iterator it =         upper_bound(seg[fc].begin(), seg[fc].end(), p);     while (it->first != p.first) it--;     if (dX < 0)       while (it->second >= x) it--;     ans += abs(x - it->second) - 1;     x = it->second;     y = (fc) ? (it->first - x) : (x - it->first);     bool A = binary_search(seg[0].begin(), seg[0].end(),                            pair<int, int>(x - y - dX, x - dX));     bool B = binary_search(seg[0].begin(), seg[0].end(),                            pair<int, int>(x - y + dY, x));     if (A == B)       flag = 1, dX = -dX, dY = -dY;     else {       if (A)         x -= dX, dY = -dY;       else if (B)         y -= dY, dX = -dX;     }   }   int main() {     scanf( %d %d %d , &n, &m, &k);     for (int i = 1; i <= m; i++) add(0, i), add(n + 1, i);     for (int i = 0; i <= n + 1; i++) add(i, 0), add(i, m + 1);     for (int i = 1; i <= k; i++) {       scanf( %d %d , &x, &y);       add(x, y);     }     scanf( %d %d , &x, &y);     char c = getchar();     while (c !=  N  && c !=  S  && c !=  W  && c !=  E ) c = getchar();     if (c ==  N )       dX = -1;     else       dX = 1;     c = getchar();     if (c ==  W )       dY = -1;     else       dY = 1;     sort(seg[0].begin(), seg[0].end());     sort(seg[1].begin(), seg[1].end());     reflect();     int sx = x, sy = y, sdx = dX, sdy = dY;     ans = 0;     do reflect();     while (!(x == sx && y == sy && dX == sdx && dY == sdy));     printf( %lld n , (flag) ? (ans >> 1) : ans);     return 0;   }   