import std.stdio, std.algorithm, std.range, std.conv, std.string, std.math, std.container, std.typecons;
import core.stdc.stdio;
// foreach, foreach_reverse, writeln

void main() {
	int n;
	scanf("%d", &n);
	int[] X = new int[n];
	int[] Y = new int[n];
	long INF = 1L<<40;
	int parity = 0;
	foreach (i; 0..n) {
		scanf("%d%d", &X[i], &Y[i]);
		int p = (X[i]+Y[i]+INF+1)%2;
		if (i == 0) parity = p;
		else if (parity != p) {
			writeln(-1);
			return;
		}
	}
	int m = 32;
	writeln(m+parity);
	foreach_reverse (i; 0..m) {
		writeln(1L<<i);
	}
	if (parity) {
		writeln(1);
	}
	foreach (_i; 0..n) {
		long x = X[_i], y = Y[_i];
		if (parity) x++;
		string ans;
		foreach_reverse (i; 0..m) {
			long l = 1L<<i;
			if (abs(x) < abs(y)) {
				if (y < 0) {
					ans ~= 'D';
					y += l;
				} else {
					ans ~= 'U';
					y -= l;
				}
			} else {
				if (x < 0) {
					ans ~= 'L';
					x += l;
				} else {
					ans ~= 'R';
					x -= l;
				}
			}
		}
		if (parity) ans ~= 'L';
		writeln(ans);
	}
}