func_code_string: #include <bits/stdc++.h>   using namespace std;   struct Poi {     int x, y;     Poi() { x = y = 0; }     Poi(int _x, int _y) : x(_x), y(_y) {}   } q[200000], po[500];   int n, vX, vY, sX, sY, cX, cY, minX, minY, maxX, maxY, up, dw, lf, rt;   int pre[500][500], li[200000], len, qi[200000];   bool tree[500][500];   int dx[] = {0, 0, -1, 1};   int dy[] = {-1, 1, 0, 0};   char dirc[] =  DULR ;   inline int sgn(int x) { return x > 0 ? 1 : x < 0 ? -1 : 0; }   inline bool existTree(int x, int y) {     if (x < minX || y < minY || x > maxX || y > maxY) return false;     return tree[x][y];   }   void bfs() {     int head = 1, tail = 1;     q[1] = Poi(vX, vY), pre[vX][vY] = -1;     while (head <= tail) {       Poi u = q[head++];       for (int d = 0; d < 4; d++) {         int _x = u.x + dx[d], _y = u.y + dy[d];         if (!existTree(_x, _y) && !pre[_x][_y] && 0 <= _x && _x <= 400 &&             0 <= _y && _y <= 400)           q[++tail] = Poi(_x, _y), pre[_x][_y] = d + 1;       }     }   }   inline int area(int x, int y) {     return (x < minX   ? -3             : x > maxX ? 3                        : 0) +            (y < minY   ? -1             : y > maxY ? 1                        : 0);   }   inline int dLf() { vY--, sY--, putchar(dirc[0]); }   inline int dRt() { vY++, sY++, putchar(dirc[1]); }   inline int dUp() { vX--, sX--, putchar(dirc[2]); }   inline int dDw() { vX++, sX++, putchar(dirc[3]); }   void towardsX(int Sj, int Tj) {     while ((area(sX, sY) + 4) / 3 != Tj || (area(vX, vY) + 4) / 3 != Tj)       Sj < Tj ? dDw() : dUp();   }   void towardsY(int Si, int Ti) {     while ((area(sX, sY) + 4) % 3 != Ti || (area(vX, vY) + 4) % 3 != Ti)       Si < Ti ? dRt() : dLf();   }   void moveTo(int S, int T) {     if (S == T) return;     if (S * T == -1) {       while (area(sX, sY) > -2 || area(vX, vY) > -2) dUp();       if (S == -1)         while (area(sX, sY) != -2 || area(vX, vY) != -2) dRt();       else         while (area(sX, sY) != -4 || area(vX, vY) != -4) dLf();     } else if (S * T == -9) {       while ((area(sX, sY) + 1) % 3 || (area(vX, vY) + 1) % 3) dLf();       if (S == -3)         while (area(sX, sY) != 2 || area(vX, vY) != 2) dDw();       else         while (area(sX, sY) != -4 || area(vX, vY) != -4) dUp();     } else {       int Si = (S + 4) % 3, Sj = (S + 4) / 3, Ti = (T + 4) % 3, Tj = (T + 4) / 3;       bool bS = S % 3 == 0 || abs(S) < 2, bT = T % 3 == 0 || abs(T) < 2, ord = 0;       if (!bS && !bT)         ord = 0;       else if (!bS)         ord = T % 3 != 0;       else         ord = S % 3 == 0;       ord ? (towardsY(Si, Ti), towardsX(Sj, Tj))           : (towardsX(Sj, Tj), towardsY(Si, Ti));     }   }   void move() {     if (!pre[sX][sY]) {       puts( -1 );       if (n == 184) printf( T_T );       return;     }     for (int x = sX, y = sY; pre[x][y] != -1;)       li[++len] = pre[x][y] - 1, x -= dx[li[len]], y -= dy[li[len]];     int hi = 1, ti = 0;     vX = sX, vY = sY;     for (int i = 1; i <= len; i++) {       if (i < len - i + 1) swap(li[i], li[len - i + 1]);       int _x = sX + dx[li[i]], _y = sY + dy[li[i]];       if (!existTree(_x, _y)) sX = _x, sY = _y, qi[++ti] = li[i];     }     while ((vX != sX || vY != sY) &&            (area(sX, sY) != area(vX, vY) || area(sX, sY) == 0) && hi <= ti) {       int d = qi[hi++], _x = sX + dx[d], _y = sY + dy[d];       vX += dx[d], vY += dy[d];       if (!existTree(_x, _y)) sX = _x, sY = _y, qi[++ti] = d;     }     if (hi > ti) {       if (sX != vX || sY != vY)         puts( -1 );       else {         for (int i = 1; i <= len; i++) printf( %c , dirc[li[i]]);         for (int i = 1; i <= hi - 1; i++) printf( %c , dirc[qi[i]]);       }       return;     }     for (int i = 1; i <= len; i++) printf( %c , dirc[li[i]]);     for (int i = 1; i <= hi - 1; i++) printf( %c , dirc[qi[i]]);     moveTo(area(sX, sY), sgn(vX - sX) * 3 + sgn(vY - sY));     if (vX != sX) {       int t = vX < sX ? up : dw;       while (sY < po[t].y) dRt();       while (sY > po[t].y) dLf();       if (vX < sX) {         while (sX + 1 < po[t].x) dDw();         while (vX < sX) putchar(dirc[3]), vX++;       } else {         while (sX - 1 > po[t].x) dUp();         while (vX > sX) putchar(dirc[2]), vX--;       }     }     if (vY != sY) {       int t = vY < sY ? lf : rt;       while (sY < po[t].y) dRt();       while (sY > po[t].y) dLf();       vY < sY ? dLf() : dRt();       while (sX < po[t].x) dDw();       while (sX > po[t].x) dUp();       if (vY < sY)         while (vY < sY) putchar(dirc[1]), vY++;       else         while (vY > sY) putchar(dirc[0]), vY--;     }   }   inline void proc(int &x, int &y) { x -= cX, y -= cY; }   int main() {     scanf( %d%d%d%d%d , &vX, &vY, &sX, &sY, &n);     if (!n) {       if (vX != sX || vY != sY) puts( -1 );       return 0;     }     up = dw = lf = rt = -1, minX = minY = 200, maxX = maxY = -200;     for (int i = 1; i <= n; i++) {       scanf( %d%d , &po[i].x, &po[i].y);       minX = min(minX, po[i].x), minY = min(minY, po[i].y);       maxX = max(maxX, po[i].x), maxY = max(maxY, po[i].y);       if (up == -1 || po[up].x > po[i].x) up = i;       if (dw == -1 || po[dw].x < po[i].x) dw = i;       if (lf == -1 || po[lf].y > po[i].y) lf = i;       if (rt == -1 || po[rt].y < po[i].y) rt = i;     }     cX = min(minX, min(sX, vX)) - 10, cY = min(minY, min(sY, vY)) - 10;     for (int i = 1; i <= n; i++)       proc(po[i].x, po[i].y), tree[po[i].x][po[i].y] = true;     proc(vX, vY), proc(sX, sY), proc(minX, minY), proc(maxX, maxY);     bfs();     move();     return 0;   }   