#include "iostream"
#include "climits"
#include "list"
#include "queue"
#include "stack"
#include "set"
#include "functional"
#include "algorithm"
#include "string"
#include "map"
#include "unordered_map"
#include "unordered_set"
#include "iomanip"
#include "cmath"
#include "random"
#include "bitset"
#include "cstdio"
#include "numeric"

using namespace std;

const long long int MOD = 1000000007;

long long int N, M, K, H, W, L, R;


int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);

	cin >> N;
	vector<pair<long long int, long long int>>v(N);
	int odd = 0;
	int even = 0;
	for (int i = 0; i < N; i++) {
		cin >> v[i].first >> v[i].second;
		if ((v[i].first + v[i].second) % 2)odd++;
		else even++;
	}
	if (odd&&even) {
		cout << -1 << endl;
		return 0;
	}
	vector<long long int>d;
	long long int box = 8589934592;
	while (box > 1) {
		d.push_back(box);
		box /= 2;
	}
	if (odd) {
		d.push_back(1);
	}
	else {
		d.push_back(1);
		d.push_back(1);
	}
	reverse(d.begin(), d.end());
	cout << d.size() << endl;
	for (int i = 0; i < d.size(); i++) {
		if (i)cout << " ";
		cout << d[i];
	}
	cout << endl;
	int dir[] = { 1,0,-1,0,1 };
	string con = "RDLU";
	for (int i = 0; i < N; i++) {
		long long int x = 0, y = 0;
		string s;
		int ret = 0;
		if (odd) {
			for (int j = 0; j < d.size() - 1; j++) {
				for (int k = 0; k < 4; k++) {
					long long int nx = x + d[j] * dir[k];
					long long int ny = y + d[j] * dir[k + 1];
					long long int dx = abs(nx - v[i].first);
					long long int dy = abs(ny - v[i].second);
					if (dx % (d[j] * 2) || dy % (d[j] * 2))	continue;
					if (dx % (d[j] * 4) && !(dy % (d[j] * 4))) ret = k;
					if (!(dx % (d[j] * 4)) && (dy % (d[j] * 4))) ret = k;
				}
				s.push_back(con[ret]);
				x += d[j] * dir[ret];
				y += d[j] * dir[ret + 1];
			}
			for (int k = 0; k < 4; k++) {
				long long int nx = x + d.back() * dir[k];
				long long int ny = y + d.back() * dir[k + 1];
				long long int dx = abs(nx - v[i].first);
				long long int dy = abs(ny - v[i].second);
				if (!dx&&!dy) {
					s.push_back(con[k]);
					x += d.back() * dir[k];
					y += d.back() * dir[k + 1];
					break;
				}
			}
		}
		else {
			int ff = 0, ss = 0;
			for (int j = 0; j < 4; j++) {
				for (int k = 0; k < 4; k++) {
					long long int nx = x + dir[k] + dir[j];
					long long int ny = y + dir[k + 1] + dir[j + 1];
					long long int dx = abs(nx - v[i].first);
					long long int dy = abs(ny - v[i].second);
					if (dx % 2 || dy % 2)	continue;
					if (dx % 4 && !(dy % 4)) ff = j, ss = k;
					if (!(dx % 4) && dy % 4) ff = j, ss = k;
				}
			}
			s.push_back(con[ff]);
			s.push_back(con[ss]);
			x += dir[ff] + dir[ss];
			y += dir[ff + 1] + dir[ss + 1];
			for (int j = 2; j < d.size() - 1; j++) {
				for (int k = 0; k < 4; k++) {
					long long int nx = x + d[j] * dir[k];
					long long int ny = y + d[j] * dir[k + 1];
					long long int dx = abs(nx - v[i].first);
					long long int dy = abs(ny - v[i].second);
					if (dx % (d[j] * 2) || dy % (d[j] * 2))	continue;
					if (dx % (d[j] * 4) && !(dy % (d[j] * 4))) ret = k;
					if (!(dx % (d[j] * 4)) && (dy % (d[j] * 4))) ret = k;
				}
				s.push_back(con[ret]);
				x += d[j] * dir[ret];
				y += d[j] * dir[ret + 1];
			}
			for (int k = 0; k < 4; k++) {
				long long int nx = x + d.back() * dir[k];
				long long int ny = y + d.back() * dir[k + 1];
				long long int dx = abs(nx - v[i].first);
				long long int dy = abs(ny - v[i].second);
				if (!dx && !dy) {
					s.push_back(con[k]);
					x += d.back() * dir[k];
					y += d.back() * dir[k + 1];
					break;
				}
			}
		}
		cout << s << endl;
		//cout << x << " " << y << endl;
	}
	return 0;
} 


Measured memory_bytes: 256