import std.stdio;
import std.algorithm;
import std.conv;
import std.numeric;
import std.math;
import std.string;

void main()
{
	auto n = to!int(chomp(readln()));
	int[2][] pos;
	int[] dist;
	foreach (i; 0..n)
	{
		auto tokens = split(chomp(readln()));
		pos  ~= [to!int(tokens[0]), to!int(tokens[1])];
		dist ~= pos[$-1][0] + pos[$-1][1];
	}
	int arm = n - 1;

	string cmnd = "LRDU";
	int[2][4] dir  = [[-1, 0], [1, 0], [-1, 0], [1, 0]];
	string test(in int[] src, in int[2] dst, int arm_cnt, string modes)
	{
		if (src == dst) return modes;
		if (arm_cnt == 40) return "";
		foreach (i, e; cmnd)
		{
			auto next = src.dup;
			next[]   += dir[i][] * pow(2, arm); 
			auto r = test(next, dst, arm_cnt + 1, modes ~ e);
			if (r != "") return r;
		}
		return "";
	}

	bool can = true;
	string[] result;
	foreach (e; pos)
	{
		auto r = test([0, 0], e, 0, "");
		if (r == "")
		{
			can = false;
			break;
		}
		result ~= r;
	}

	writeln(40);
	write(1);
	foreach (i; 1..40)
	{
		write(" ", pow(2, i));
	}
	writeln();
	foreach (e; result)
		writeln(result);
	stdout.flush();
}