import java.io.*;
import java.util.*;
public class Main {
//-------------------------------------------------------------//
public static final void main(String[] args) {
new Main().solve();
}
//-------------------------------------------------------------//
private final int dx4[] = {0, 0, -1, 1};
private final int dy4[] = {-1, 1, 0, 0};
private final int dx8[] = {0, 1, 1, 1, 0, -1, -1, -1};
private final int dy8[] = {-1, -1, 0, 1, 1, 1, 0, -1};
//-------------------------------------------------------------//
private final Scanner sc = new Scanner(System.in);
private Random rnd = new Random();
private final boolean DEBUG = false;
private final int H = 30;
private final int W = 30;
private final int K = 450;
private final int T = 800;
private final int MOVE_LIMIT = 450;
private final double INITIAL_TEMP = 0.3d;
private final char[] UDLR = {'U', 'D', 'L', 'R'};
private boolean[][] board = new boolean[H][W];
private List<Car> cars = new ArrayList<Car>();
int mh(int r1, int c1, int r2, int c2) { return Math.abs(r1 - r2) + Math.abs(c1 - c2); }
void solve() {
sc.nextLine();
for (int i = 0; i < H; i++)
Arrays.fill(board[i], false);
for (int i = 1; i <= K; i++) {
int r = sc.nextInt() - 1;
int c = sc.nextInt() - 1;
int tr = sc.nextInt() - 1;
int tc = sc.nextInt() - 1;
board[r][c] = true;
cars.add(new Car(r, c, tr, tc));
}
List<String> ans = new ArrayList<String>();
double temp = INITIAL_TEMP;
int moveLimit = MOVE_LIMIT;
for (int turn = 0; turn < T; turn++) {
temp = INITIAL_TEMP - INITIAL_TEMP * ((double) turn / (double) T);
moveLimit = (int)(MOVE_LIMIT - MOVE_LIMIT * ((double) turn / (double) T)) + 100;
boolean notMove = true;
List<Integer> res = new ArrayList<Integer>();
int moveNum = 0;
for (int ci = 1; ci <= K; ci++) {
Car car = cars.get(ci - 1);
if ((car.isGoal() && rnd.nextDouble() >= temp) || moveNum > moveLimit) {
res.add(-1);
continue;
}
int minDist = 100000;
for (int i = 0; i < 4; i++) {
int r = car.r + dy4[i];
int c = car.c + dx4[i];
if (car.pr == r && car.pc == c) continue;
if (r < 0 || r >= H || c < 0 || c >= W) continue;
int dist = mh(r, c, car.gr, car.gc);
if (dist < minDist && !board[r][c]) {
minDist = dist;
}
}
boolean moved = false;
for (int i = 0; i < 4; i++) {
int r = car.r + dy4[i];
int c = car.c + dx4[i];
if (car.pr == r && car.pc == c) continue;
if (r < 0 || r >= H || c < 0 || c >= W) continue;
int dist = mh(r, c, car.gr, car.gc);
if (board[r][c]) continue;
if (dist == minDist || rnd.nextDouble() <= 0.1) {
if (rnd.nextDouble() <= 0.1) continue;
notMove = false;
moved = true;
moveNum++;
board[r][c] = true;
res.add(i);
break;
}
}
if (!moved) res.add(-1);
}
if (notMove) break;
String rs = "";
for (int i = 0; i < K; i++) {
int d = res.get(i);
if (d == -1) {
rs += "-";
}
else {
Car car = cars.get(i);
board[car.r][car.c] = false;
car.pr = car.r;
car.pc = car.c;
car.r += dy4[d];
car.c += dx4[d];
board[car.r][car.c] = true;
rs += UDLR[d];
}
}
ans.add(rs);
}
if (DEBUG) {
try {
File file = new File("out.txt");
FileWriter fw = new FileWriter(file);
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter pw = new PrintWriter(bw);
pw.println(ans.size());
for (int i = 0; i < ans.size(); i++) {
pw.println(ans.get(i));
}
pw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
else {
System.out.println(ans.size());
for (int i = 0; i < ans.size(); i++) {
System.out.println(ans.get(i));
}
}
}
}
class Car {
int r, c;
int gr, gc;
int pr, pc;
Car() {}
Car(int r, int c, int gr, int gc) { this.r = r; this.c = c; this.gr = gr; this.gc = gc; pr = r; pc = c; }
boolean isGoal() { return r == gr && c == gc; }
}