#include <bits/stdc++.h>
using namespace std;
int cost[10][10], p[10][10];
int dx[] = {0, 0, 1, 1, 1, -1, -1, -1};
int dy[] = {1, -1, 1, -1, 0, 1, -1, 0};
string direc[] = {"U", "D", "RU", "RD", "R", "LU", "LD", "L"};
bool isValid(int x, int y) {
  if (x < 0 || y < 0 || x == 8 || y == 8) return false;
  if (cost[x][y] != -1) return false;
  return true;
}
void BFS(int x, int y) {
  queue<pair<pair<int, int>, int> > q;
  q.push(make_pair(make_pair(x, y), 0));
  cost[x][y] = 0;
  p[x][y] = -1;
  while (!q.empty()) {
    int ux = q.front().first.first;
    int uy = q.front().first.second;
    int c = q.front().second;
    q.pop();
    for (int i = 0; i < 8; i++) {
      if (isValid(ux + dx[i], uy + dy[i])) {
        cost[ux + dx[i]][uy + dy[i]] = c + 1;
        p[ux + dx[i]][uy + dy[i]] = i;
        q.push(make_pair(make_pair(ux + dx[i], uy + dy[i]), c + 1));
      }
    }
  }
}
int main() {
  memset(cost, -1, sizeof cost);
  string a, b;
  vector<string> ans;
  cin >> a >> b;
  int sx = a[0] - 'a';
  int sy = a[1] - '1';
  int ex = b[0] - 'a';
  int ey = b[1] - '1';
  BFS(sx, sy);
  cout << cost[ex][ey] << endl;
  while (p[ex][ey] != -1) {
    ans.push_back(direc[p[ex][ey]]);
    int oldex = ex;
    ex += -1 * dx[p[ex][ey]];
    ey += -1 * dy[p[oldex][ey]];
  }
  reverse(ans.begin(), ans.end());
  for (int i = 0; i < ans.size(); i++) cout << ans[i] << endl;
  return 0;
}
