#include <bits/stdc++.h>
using namespace std;

using ll = long long;
using vl = vector<ll>;
using vi = vector<int>;

#define rng(i, a, b) for(int i = (a); i < (b); ++i)
#define rep(n) for(int _ = 0, __ = (int)n; _ < __; _++)
#define stp(i, a, b, c) for (int i = (a); i < (b); i += (c))
#define FOR(x, cont) for (auto &x: cont)
#define all(x) (x).begin(), (x).end()
#define pb push_back
#define eb emplace_back
#define SZ(x) (int)(x).size()
#define pq(T,COMP) priority_queue<T, vector<T>, COMP>
auto bet = [](const ll x, const ll y, const ll i) {
    return x <= i && i <= y;
};
using pii = pair<int,int>;
using vb = vector<bool>;
template <typename T>
struct bit {
    vector<T> a;
    explicit bit(int n, int v = 0) {
        a.resize(n + 1);
        if(v != 0) {
            for (int i = 1; i <= n; ++i) a[i] = v;
        }
    }

    T sum(T x) {
        T res = 0;
        while (x) {
            res += a[x];
            x -= x & -x;
        }
        return res;
    }

    T sum(int l, int r) {
        if (l > r) return 0;
        return sum(r) - sum(l - 1);
    }

    void add(int x, T v) {
        while (x < a.size()) {
            a[x] += v;
            x += x & -x;
        }
    }
    void clear(){
        fill(a.begin(), a.end(), 0);
    }
};
vi get_prime(int n) {
    vi minp(n+1);
    vi p;
    for (int i = 2; i <= n; i++) {
        if (!minp[i]) {
            minp[i] = i;
            p.pb(i);
        }
        FOR(x, p) {
            if (x <= minp[i] && x * i <= n)
                minp[x * i] = x;
        }
    }
    return p;
}

const int mod = 1e9 + 7;

void add_mod(ll &x, const ll &y) {
    x += y;
    if (x >= mod) x -= mod;
}
void sub_mod(ll &x, const ll &y) {
    x -= y;
    if (x < 0) x += mod;
}




const int N = 1005;

int dx[4] = {0, 0, 1, -1}, dy[4] = {-1, 1, 0, 0};
const char *op = "DURL";

string solve(ll x, ll y) {
    string s;
    for (int i = 30; i >= 0; i--) {
        int len =  1 << i;
        rng (j, 0, 4) {
            ll px = x - len * dx[j], py = y - len * dy[j];
            if (abs(px) + abs(py) <= len - 1) {
                s += op[j];
                x = px, y = py;
//                cout << x << ' ' << y << endl;
                break;
            }
        }
    }
//    cout <<"last: " << x << ' ' << y << endl;
    assert(x == 0 && y == 0);
    assert(s.size() == 31);
    reverse(all(s));
    return s;
}



int main() {
#ifdef LOCAL
    freopen("main.in", "r", stdin);
//    freopen("main.out", "w", stdout);
#endif
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    int n;
    cin >> n;
    vector<pii> p(n);
    FOR(x, p) cin >> x.first >> x.second;

    bool is_odd = (abs(p[0].first) + abs(p[0].second)) & 1;

    rng (i, 1, n) {
        if ((abs(p[i].first) + abs(p[i].second)) % 2 != is_odd) {
            cout << -1 << endl;
            return 0;
        }
    }
    cout << (is_odd ? 31 : 32) << endl;

    if (!is_odd) {
        cout << 1 << ' ';
    }

    int x = 1;
    rep(31) {
        cout << x << ' ';
        x *= 2;
    }
    cout << '\n';

    rng (i, 0, n) {
        int x = p[i].first, y = p[i].second;
        if (!is_odd) {
            cout << 'U';
            y--;
        }
        cout << solve(x, y) << endl;
    }

    return 0;
}



Measured memory_bytes: 256