#include <bits/stdc++.h>
using namespace std;
const int inf = 0x3f3f3f3f;
const long long infLL = 0x3f3f3f3f3f3f3f3fLL;
const int hash_mod = 1000037;
const double pi = acos(-1);
const double eps = 1e-10;
const int maxn = 500 + 2;
int n, x, y;
bool g[maxn][maxn];
bool vis[maxn][maxn];
set<int> r[maxn], c[maxn];
string res;
void dfs(int x, int y) {
  if (!r[x].empty() && *r[x].begin() < y) {
    if (!g[x][y]) {
      g[x][y] = true;
      res += '1';
    }
    if (!vis[x][y - 1]) {
      vis[x][y - 1] = true;
      res += 'L';
      dfs(x, y - 1);
      res += 'R';
    }
  }
  if (!r[x].empty() && *r[x].rbegin() > y) {
    if (!g[x][y]) {
      g[x][y] = true;
      res += '1';
    }
    if (!vis[x][y + 1]) {
      vis[x][y + 1] = true;
      res += 'R';
      dfs(x, y + 1);
      res += 'L';
    }
  }
  if (!c[y].empty() && *c[y].begin() < x) {
    if (!g[x][y]) {
      g[x][y] = true;
      res += '1';
    }
    if (!vis[x - 1][y]) {
      vis[x - 1][y] = true;
      res += 'U';
      dfs(x - 1, y);
      res += 'D';
    }
  }
  if (!c[y].empty() && *c[y].rbegin() > x) {
    if (!g[x][y]) {
      g[x][y] = true;
      res += '1';
    }
    if (!vis[x + 1][y]) {
      vis[x + 1][y] = true;
      res += 'D';
      dfs(x + 1, y);
      res += 'U';
    }
  }
  if (r[x].count(y)) r[x].erase(y);
  if (c[y].count(x)) c[y].erase(x);
  if (g[x][y]) {
    g[x][y] = false;
    res += '2';
  }
}
int main() {
  scanf("%d%d%d", &n, &x, &y);
  --x;
  --y;
  for (int i = 0; i < n; ++i)
    for (int j = 0; j < n; ++j) {
      scanf("%d", &g[i][j]);
      if (g[i][j]) {
        r[i].insert(j);
        c[j].insert(i);
      }
    }
  vis[x][y] = true;
  dfs(x, y);
  bool ok = true;
  for (int i = 0; i < n; ++i)
    for (int j = 0; j < n; ++j)
      if (g[i][j]) ok = false;
  if (ok) {
    puts("YES");
    printf("%s\n", res.c_str());
  } else {
    puts("NO");
  }
  return 0;
}
