#include <bits/stdc++.h>
using namespace std;
int vis[510][510];
int can[510][510][4];
int dx[4] = {-1, 0, 1, 0};
int dy[4] = {0, 1, 0, -1};
char ans[3100000];
int cnt;
int ok(int x, int y, int n) {
  return x >= 1 && x <= n && y >= 1 && y <= n && !vis[x][y];
}
int sta[510][510], n;
char dir[10] = "URDL";
int c1[510][510];
int c2[510][510];
void upd(int *c, int x, int k) {
  while (x <= n) c[x] += k, x += x & (-x);
}
int get(int *c, int n) {
  int ans = 0;
  while (n) ans += c[n], n -= n & (-n);
  return ans;
}
int jud(int x, int y, int d) {
  if (d == 0) return get(c2[y], x - 1);
  if (d == 2) return get(c2[y], n) - get(c2[y], x);
  if (d == 3) return get(c1[x], y - 1);
  return get(c1[x], n) - get(c1[x], y);
}
void dfs(int x, int y) {
  if (!sta[x][y]) ans[cnt++] = '1', upd(c1[x], y, 1), upd(c2[y], x, 1);
  sta[x][y] = vis[x][y] = 1;
  for (int i = 0; i < 4; i++)
    if (ok(x + dx[i], y + dy[i], n) && jud(x, y, i)) {
      ans[cnt++] = dir[i];
      dfs(x + dx[i], y + dy[i]);
      ans[cnt++] = dir[(i + 2) % 4];
    }
  ans[cnt++] = '2';
  sta[x][y] = 0;
  upd(c1[x], y, -1);
  upd(c2[y], x, -1);
}
int main() {
  int i, j, k, x, y;
  cin >> n >> x >> y;
  for (i = 1; i <= n; i++)
    for (j = 1; j <= n; j++) scanf("%d", &sta[i][j]);
  for (i = 1; i <= n; i++) {
    k = 0;
    for (j = n; j >= 2; j--) {
      k |= sta[i][j];
      can[i][j - 1][1] = k;
    }
    k = 0;
    for (j = 1; j < n; j++) {
      k |= sta[i][j];
      can[i][j + 1][3] = k;
    }
  }
  for (j = 1; j <= n; j++) {
    k = 0;
    for (i = n; i >= 2; i--) {
      k |= sta[i][j];
      can[i - 1][j][2] = k;
    }
    k = 0;
    for (i = 1; i < n; i++) {
      k |= sta[i][j];
      can[i + 1][j][0] = k;
    }
  }
  for (i = 1; i <= n; i++)
    for (j = 1; j <= n; j++)
      if (sta[i][j]) upd(c1[i], j, 1), upd(c2[j], i, 1);
  dfs(x, y);
  for (i = 1; i <= n; i++)
    for (j = 1; j <= n; j++)
      if (sta[i][j]) {
        puts("NO");
        return 0;
      }
  ans[cnt] = 0;
  puts("YES");
  puts(ans);
}
