#include <iostream>
#include <iomanip>
#include <string>
#include <cmath>
#include <algorithm>
#include <vector>
#include <set>
#include <map>
#include <unordered_map>
#include <unordered_set>
#include <list>
#include <stack>
#include <queue>
#include <bitset>

#define FOR(i, b, e) for(ll i = (ll)(b); i < (ll)(e); ++i)
#define RFOR(i, b, e) for(ll i = (ll)(e-1); i >= (ll)(b); --i)
#define REP(i, n) FOR(i, 0, n)
#define RREP(i, n) RFOR(i, 0, n)
#define REPC(x,c) for(const auto& x:(c))
#define VS vector<string>
#define VL vector<long long>
#define VI vector<int>
#define VVI vector<vector<int>>
#define VVL vector<vector<ll>>
#define ALL(x) (x).begin(),(x).end()
#define SORT(x) sort(ALL(x))
#define RSORT(x) sort((x).rbegin(),(x).rend())
#define PAIR pair<ll,ll>
#define UNIQUE(v) v.erase( unique(v.begin(), v.end()), v.end() );

using  ll = long long;
constexpr ll MOD = 1000000007;
//constexpr ll MOD = 998244353;
using std::cout;
using std::endl;
using std::cin;
using std::sort;
using std::pair;
using std::string;
using std::stack;
using std::queue;
using std::vector;
using std::list;
using std::map;
using std::unordered_map;
using std::multimap;
using std::unordered_multimap;
using std::set;
using std::unordered_set;
using std::multiset;
using std::bitset;


// ll gcd(ll a, ll b) { return b ? gcd(b, a%b) : a; }
// ll lcm(ll a, ll b) { return a / gcd(a, b) * b; }
ll pow(ll a, ll b) { ll ans = 1; while (b > 0) { if (b % 2 == 1) { ans *= a; ans %= MOD; }b /= 2; a *= a; a %= MOD; }return ans; }
// ll comb(ll a, ll b) { static constexpr ll size = 1e6; static VL fac(size); static VL finv(size); static VL inv(size); static ll n = 0; if (n > a) { return fac[a] * (finv[b] * finv[a - b] % MOD) % MOD; }fac[0] = fac[1] = 1; finv[0] = finv[1] = 1; inv[1] = 1; FOR(i, 2, a + 1) { inv[i] = MOD - inv[MOD%i] * (MOD / i) % MOD; fac[i] = fac[i - 1] * (ll)i%MOD; finv[i] = finv[i - 1] * inv[i] % MOD; }n = a + 1; return comb(a, b); }
// multiset<ll> prime_decomposition(ll n) { ll i = 2; multiset<ll> table{}; while (i * i <= n) { while (n % i == 0) { n /= i;	table.emplace(i); }++i; }if (n > 1) { table.emplace(n); return table; }return table; }
//-- bit -- REP(i, (1 << n)) {REP(j, n) {cout << (1 & (i >> j));}cout << endl;}

//==============================================================================================

int main() {
	ll n;
	cin >> n;
	vector<PAIR> v;
	v.reserve(n);
	REP(i, n) {
		ll a, b;
		cin >> a >> b;
		v.emplace_back(a, b);
	}
	ll odd = (abs(v[0].first)+ abs(v[0].second)) % 2;
	REPC(p, v) {
		if ((abs(p.first) + abs(p.second)) % 2 != odd) {
			cout << -1 << endl;
			return 0;
		}
	}

	VL tNum;
	const ll num = 32 + (odd + 1) % 2;
	tNum.reserve(num);
	REP(i, (odd + 1) % 2) { tNum.emplace_back(1); }
	ll t = 1;
	REP(i, 32) {
		tNum.emplace_back(t);
		t *= 2;
	}
	std::reverse(ALL(tNum));

	cout << num << endl;
	REPC(t, tNum) {
		cout << t << " ";
	}
	cout << endl;

	REPC(p, v) {
		ll x = p.first;
		ll y = p.second;
		ll u = x + y;
		ll v = x - y;
		REPC(t, tNum) {
			if (u >= 0 && v >= 0) { cout << "R"; u -= t; v -= t; } else if (u < 0 && v >= 0) { cout << "D"; u += t; v -= t; } else if (u >= 0 && v < 0) { cout << "U"; u -= t; v += t; } else/* if (u < 0 && v < 0)*/ { cout << "L"; u += t; v += t; }
		}
		cout << endl;
		// cout << (u + v) / 2 << " ";
		// cout << (u - v) / 2 << endl;
	}
}


Measured memory_bytes: 256