#include <iostream>
#include <stdio.h>
#include <string>
#include <vector>
#include <set>
#include <cmath>
#include <algorithm>
#include <cstdio>
#include <queue>
#include <map>
#include <limits>
#include <tuple>
using namespace std;
typedef long long ll;
#define REP(i,n) for(int i=0, i##_len=(n); i<i##_len; ++i)
#define REPR(i, n) for(int i = n;i >= 0;i--)
#define FOR(i, m, n) for(int i = m;i < n;i++)

float inf = std::numeric_limits<float>::infinity();
ll mod = 1e9+7;

/* 二次元配列の宣言
  vector<vector<int>> tb;
  tb.resize(H);
  for (size_t i = 0; i < H; i++) {
    tb[i].resize(W);
  }
*/
/*
  A.resize(N);
  for (int i = 0; i < N; i++) {scanf("%d",&A[i]);}
*/

int max(int &a,int &b){if(a>b){return a;}else{return b;}}
int min(int &a,int &b){if(a>b){return b;}else{return a;}}

int ar_max(vector<int> &v){
  int max_val = v[0];
  for (size_t i = 1; i < v.size(); i++) {
    if (v[i]>max_val){max_val=v[i];}
  }
  return max_val;
}

int ar_min(vector<int> &v){
  int min_val = v[0];
  for (size_t i = 1; i < v.size(); i++) {
    if (v[i]<min_val){min_val=v[i];}
  }
  return min_val;
}


/* Binary Search(v,N,flag)
  flag = true -> return ind(int) 挿入index
  flag = false -> return in(0or1) 入ってるかどうか*/
int b_search(vector<int> &v, int &N, bool flag=true){
  sort(v.begin(),v.end());
  int left=0,right=v.size()-1,ind;
  if (N < v[left]){return 0;}
  if (N > v[right]){return right+1;}
  while(true){
    ind = (left+right)/2;
    if (v[ind]>N){right = ind;}
    else if(v[ind]<N){left = ind;}
    else if(v[ind]==N){
      if(flag){return ind;}
      else{return 1;}
    }

    /* 終了判定*/
    if (right-left<=1){
      if(flag){
        if(v[left]==N){
          return left;
        }else{
          return right;
        }
      }else{
        if(v[left]==N || v[right]==N){return 1;}
        else{return 0;}
      }
    }
  }
}

/*素因数分解(N) ex:N=90(=2*3^2*5)
prime_tb = [2,3,5]
ans_tb = [[2,1][3,2][5,1]]*/
vector<vector<int>> prime_factor(int &N){
  vector<int> prime_tb;
  vector<vector<int>> ans_tb;
  int max_pr=0,prime=2,ind;
  while (N>=2){
    if (N%prime==0){
      if(max_pr>=prime){/*既に出た素因数*/
        ind = b_search(prime_tb,prime);
        ans_tb[ind][1]++;
      }else if(max_pr<N){/*初めて素因数*/
        ind = prime_tb.size();
        ans_tb.push_back({prime,1});
        prime_tb.push_back(prime);
        max_pr = prime;
      }
      N /= prime;
      prime = 2;
    }else{
      prime ++;
    }
  }
  return ans_tb;
}

/*約数の数*/
int divsor_num(int &N){
  vector<vector<int>> pf_tb;
  int ans=1;
  pf_tb = prime_factor(N);
  for (size_t i = 0; i < pf_tb.size(); i++) {
    ans *= pf_tb[i][1]+1;
  }
  return ans;
}

int write_arr(vector<char> arr){
  REP(i,arr.size()){cout << arr[i];}
}


int main(void) {
  int sx,sy,tx,ty;
  int dx,dy;
  bool x_fl,y_fl;
  vector<char> ans1,ans2;
  cin >> sx >> sy >> tx >> ty;
  dx = abs(tx-sx),dy=abs(ty-sy);
  x_fl = tx-sx>0, y_fl = ty-sy>0;

  REP(i,dx){
    if(x_fl){ans1.push_back('R');}
    else{ans1.push_back('L');}
  }
  REP(i,dy){
    if(y_fl){ans1.push_back('U');}
    else{ans1.push_back('D');}
  }
  REP(i,dx){
    if(x_fl){ans2.push_back('L');}
    else{ans2.push_back('R');}
  }
  REP(i,dy){
    if(y_fl){ans2.push_back('D');}
    else{ans2.push_back('U');}
  }

  write_arr(ans1);
  write_arr(ans2);
  if(y_fl){cout << 'D';}
  else{cout << 'U';}
  if(x_fl){cout << 'R';}
  else{cout << 'L';}
  write_arr(ans1);
  if(!y_fl){cout << 'D';}
  else{cout << 'U';}
  if(!x_fl){cout << 'R';}
  else{cout << 'L';}
  if(!y_fl){cout << 'D';}
  else{cout << 'U';}
  if(!x_fl){cout << 'R';}
  else{cout << 'L';}
  write_arr(ans2);
  if(y_fl){cout << 'D';}
  else{cout << 'U';}
  if(x_fl){cout << 'R';}
  else{cout << 'L';}



}


Measured memory_bytes: 256