#include <bits/stdc++.h>
using namespace std;
struct Point {
  int x, y;
  Point() {}
  Point(int a, int b) { x = a, y = b; }
} usetree[4];
vector<int> op;
char trans[4] = {'R', 'U', 'D', 'L'};
int step[4][2] = {{1, 0}, {0, 1}, {0, -1}, {-1, 0}};
int pre[505][505];
int m, stx, sty, shax, shay;
bool vis[405][405], tree[405][405];
int ax[1005], ay[1005];
string ans;
queue<Point> q;
bool in(int x, int y) { return x >= 0 && x <= 300 && y >= 0 && y <= 300; }
void bfs() {
  while (!q.empty()) {
    Point x = q.front();
    q.pop();
    for (int d = 0; d < 4; ++d) {
      int tx = x.x + step[d][0], ty = x.y + step[d][1];
      if (in(tx, ty) && !tree[tx][ty] && !vis[tx][ty]) {
        vis[tx][ty] = 1;
        pre[tx][ty] = d;
        if (tx == shax && ty == shay) return;
        q.push(Point(tx, ty));
      }
    }
  }
}
bool move(int dir) {
  stx += step[dir][0], sty += step[dir][1], shax += step[dir][0],
      shay += step[dir][1];
  ans += trans[dir];
  if (in(shax, shay) && tree[shax][shay]) {
    shax -= step[dir][0], shay -= step[dir][1];
    return 1;
  }
  return 0;
}
void back(int x, int y) {
  if (x == stx && y == sty) return;
  op.push_back(pre[x][y]);
  back(x - step[pre[x][y]][0], y - step[pre[x][y]][1]);
}
void init() {
  while (stx >= 0 && stx <= 300 || shax >= 0 && shax <= 300) move(0);
  while (sty >= 0 && sty <= 300 || shay >= 0 && shay <= 300) move(1);
}
void up() {
  init();
  while (shay <= 300) move(1);
  while (shax != usetree[1].x) move(shax < usetree[1].x ? 0 : 3);
  while (sty != shay) move(2);
}
void down() {
  init();
  while (shay >= 0) move(2);
  while (shax != usetree[2].x) move(shax < usetree[2].x ? 0 : 3);
  while (sty != shay) move(1);
}
void left() {
  init();
  while (shax >= 0) move(3);
  while (shay != usetree[3].y) move(shay < usetree[3].y ? 1 : 2);
  while (stx != shax) move(0);
}
void right() {
  init();
  while (shax <= 300) move(0);
  while (shay != usetree[0].y) move(shay < usetree[0].y ? 1 : 2);
  while (stx != shax) move(3);
}
void improve() {
  if (sty > shay) up();
  if (sty < shay) down();
  if (stx < shax) left();
  if (stx > shax) right();
}
void work() {
  back(shax, shay);
  reverse(op.begin(), op.end());
  for (int i = 0; i < op.size(); ++i) {
    bool ok = move(op[i]);
    if (!ok) op.push_back(op[i]);
    if (stx == shax && sty == shay) return;
    if (!in(stx, sty)) break;
  }
  improve();
}
int main() {
  ios::sync_with_stdio(0);
  cin >> stx >> sty >> shax >> shay >> m;
  stx += 150, sty += 150, shax += 150, shay += 150;
  usetree[3].x = usetree[2].y = 1e9;
  usetree[0].x = usetree[1].y = -1e9;
  for (int i = 1; i <= m; ++i) {
    cin >> ax[i] >> ay[i];
    ax[i] += 150, ay[i] += 150;
    if (usetree[0].x < ax[i]) usetree[0] = Point(ax[i], ay[i]);
    if (usetree[1].y < ay[i]) usetree[1] = Point(ax[i], ay[i]);
    if (usetree[2].y > ay[i]) usetree[2] = Point(ax[i], ay[i]);
    if (usetree[3].x > ax[i]) usetree[3] = Point(ax[i], ay[i]);
    vis[ax[i]][ay[i]] = tree[ax[i]][ay[i]] = 1;
  }
  if (!m) {
    cout << -1;
    return 0;
  }
  q.push(Point(stx, sty));
  bfs();
  if (!vis[shax][shay]) {
    cout << -1;
    return 0;
  }
  ans = "";
  work();
  cout << ans;
  return 0;
}
