#include <bits/stdc++.h>   using namespace std;   template <typename T>   void read(T &x) {     x = 0;     char ch = getchar();     int fh = 1;     while (ch <  0  || ch >  9 ) {       if (ch ==  - ) fh = -1;       ch = getchar();     }     while (ch >=  0  && ch <=  9 ) x = x * 10 + ch -  0 , ch = getchar();     x *= fh;   }   struct Po {     long long x, y, t;   } po[200010];   struct shj {     long long t, x, zh;   } a[200010];   int n, l;   bool an1[2000010], an2[2000010];   bool c1(const shj &a, const shj &b) { return a.t < b.t; }   int main() {     read(n);     read(l);     for (int i = 1; i <= n; i++) {       read(po[i].t);       read(po[i].x);       read(po[i].y);     }     for (int i = 1; i <= n; i++) {       a[i].t = po[i].t % l;       a[i].x = po[i].x + po[i].y + po[i].t;       if (a[i].x % 2 == 1 || a[i].x < 0) {         puts( NO );         return 0;       } else         a[i].x /= 2;       a[i].zh = po[i].t / l;     }     a[n + 1] = (shj){0, 0, 0};     a[n + 2] = (shj){l, 0, -1};     sort(a + 1, a + n + 3, c1);     long long nl = 0, nr = l;     for (int i = 1; i <= n + 1; i++) {       long long x = a[i + 1].t - a[i].t, y = a[i + 1].zh - a[i].zh,                 z = a[i + 1].x - a[i].x;       if (y > 0) {         if ((z - x) % y == 0)           nl = max(nl, (z - x) / y);         else           nl = max(nl, (z - x) / y + 1);         nr = min(nr, z / y);       }       if (y < 0) {         z = -z;         y = -y;         if (z % y == 0)           nl = max(nl, z / y);         else           nl = max(nl, z / y + 1);         nr = min(nr, (z + x) / y);       }     }     if (nl > nr) {       puts( NO );       return 0;     }     for (int i = 1; i <= n + 1; i++) {       long long su = a[i + 1].x - a[i].x - (a[i + 1].zh - a[i].zh) * nl;       for (int j = a[i].t + 1; j <= a[i + 1].t; j++)         if (su) {           an1[j] = 1;           su--;         } else           an1[j] = 0;     }     for (int i = 1; i <= n; i++) {       a[i].t = po[i].t % l;       a[i].x = po[i].y - po[i].x + po[i].t;       if (a[i].x % 2 == 1 || a[i].x < 0) {         puts( NO );         return 0;       } else         a[i].x /= 2;       a[i].zh = po[i].t / l;     }     a[n + 1] = (shj){0, 0, 0};     a[n + 2] = (shj){l, 0, -1};     sort(a + 1, a + n + 3, c1);     nl = 0, nr = l;     for (int i = 1; i <= n + 1; i++) {       long long x = a[i + 1].t - a[i].t, y = a[i + 1].zh - a[i].zh,                 z = a[i + 1].x - a[i].x;       if (y > 0) {         if ((z - x) % y == 0)           nl = max(nl, (z - x) / y);         else           nl = max(nl, (z - x) / y + 1);         nr = min(nr, z / y);       }       if (y < 0) {         z = -z;         y = -y;         if (z % y == 0)           nl = max(nl, z / y);         else           nl = max(nl, z / y + 1);         nr = min(nr, (z + x) / y);       }     }     if (nl > nr) {       puts( NO );       return 0;     }     for (int i = 1; i <= n + 1; i++) {       long long su = a[i + 1].x - a[i].x - (a[i + 1].zh - a[i].zh) * nl;       for (int j = a[i].t + 1; j <= a[i + 1].t; j++) {         if (su) {           an2[j] = 1;           su--;         } else           an2[j] = 0;       }     }     for (int i = 1; i <= l; i++) printf( %c ,  DLRU [2 * an1[i] + an2[i]]);     puts(  );     return 0;   }