#include <bits/stdc++.h>
using namespace std;
queue<int> q;
stack<int> ans;
string s, e;
int dr[] = {-1, -1, -1, 0, 0, 1, 1, 1};
int dc[] = {-1, 0, 1, -1, 1, -1, 0, 1};
int trace[9][9];
int f[10][10], vis[10][10];
int a, b, c, d;
void Print(int i) {
  if (i == 0)
    printf("LD\n");
  else if (i == 1)
    printf("D\n");
  else if (i == 2)
    printf("RD\n");
  else if (i == 3)
    printf("L\n");
  else if (i == 4)
    printf("R\n");
  else if (i == 5)
    printf("LU\n");
  else if (i == 6)
    printf("U\n");
  else if (i == 7)
    printf("RU\n");
}
void Tracev(int u, int v) {
  if (trace[u][v] == 0) return;
  if (u == a && v == b) return;
  ans.push(trace[u][v] - 1);
  Tracev(u - dr[trace[u][v] - 1], v - dc[trace[u][v] - 1]);
}
void Writeans() {
  cout << ans.size() << endl;
  while (!ans.empty()) {
    Print(ans.top());
    ans.pop();
  }
}
int main() {
  cin >> s >> e;
  if (s == e) {
    cout << 0 << endl;
    return 0;
  }
  b = (s[0] - 'a') + 1;
  a = (s[1] - '0');
  d = (e[0] - 'a') + 1;
  c = (e[1] - '0');
  q.push(a);
  q.push(b);
  f[a][b] = 0;
  vis[a][b] = 1;
  int u, v;
  while (!q.empty()) {
    u = q.front();
    q.pop();
    v = q.front();
    q.pop();
    int nu, nv;
    for (int i = 0; i < 8; i++) {
      nu = u + dr[i];
      nv = v + dc[i];
      if (nu <= 0 || nv <= 0 || nu > 8 || nv > 8) continue;
      if (!vis[nu][nv]) {
        trace[nu][nv] = i + 1;
        f[nu][nv] = f[u][v] + 1;
        q.push(nu);
        q.push(nv);
        vis[nu][nv] = 1;
        if (nu == c && nv == d) {
          Tracev(nu, nv);
          Writeans();
          return 0;
        }
      }
    }
  }
  return 0;
}
