#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;
}
