#include <bits/stdc++.h>
using namespace std;
const int INF = (int)1e9;
const long long INF64 = (long long)1e18;
const long double eps = 1e-9;
const long double pi = 3.14159265358979323846;
int n;
int xx0, yy0;
int trans[510][510];
int fa[260000];
int nu[510][510];
int use[510][510];
int minCol[510], maxCol[510];
int minRow[510], maxRow[510];
int mv[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};
char ch[] = "UDLR";
string ans;
int rt(int now) {
  if (fa[now] == now) return now;
  return fa[now] = rt(fa[now]);
}
void dfs(int xx, int yy) {
  int dx, dy;
  use[xx][yy] = 1;
  if (!nu[xx][yy]) ans += "1", nu[xx][yy] = 1;
  for (int k = 0; k < 4; k++) {
    dx = xx + mv[k][0];
    dy = yy + mv[k][1];
    bool flag = false;
    while (flag == false && 0 <= dx && dx < n && 0 <= dy && dy < n) {
      if (nu[dx][dy]) flag = true;
      dx += mv[k][0];
      dy += mv[k][1];
    }
    dx = xx + mv[k][0];
    dy = yy + mv[k][1];
    if (flag) {
      if (use[dx][dy] == 0 && rt(trans[dx][dy]) == rt(trans[xx0][yy0])) {
        ans += ch[k];
        dfs(dx, dy);
        ans += ch[k ^ 1];
      }
    }
  }
  ans += "2";
  nu[xx][yy] = 0;
}
int main() {
  int xx, yy;
  int cnt;
  int i, j;
  int a, b;
  bool ansF;
  memset(use, 0, sizeof(use));
  cin >> n >> xx >> yy;
  xx--, yy--;
  xx0 = xx;
  yy0 = yy;
  for (i = 0; i < n; i++) {
    minCol[i] = minRow[i] = INF;
    maxCol[i] = maxRow[i] = -INF;
  }
  cnt = 0;
  for (i = 0; i < n; i++) {
    for (j = 0; j < n; j++) {
      cin >> nu[i][j];
      if (nu[i][j]) {
        minCol[j] = min(minCol[j], i);
        maxCol[j] = max(maxCol[j], i);
        minRow[i] = min(minRow[i], j);
        maxRow[i] = max(maxRow[i], j);
      }
      trans[i][j] = cnt;
      fa[cnt] = cnt;
      cnt++;
    }
  }
  for (int k = 0; k < 2; k++) {
    for (i = 0; i < n; i++) {
      if (minCol[i] != INF) {
        for (j = minCol[i] + 1; j <= maxCol[i]; j++) {
          a = trans[j - 1][i];
          b = trans[j][i];
          if (rt(a) != rt(b)) fa[rt(a)] = rt(b);
          minRow[j] = min(minRow[j], i);
          maxRow[j] = max(maxRow[j], i);
        }
      }
      if (minRow[i] != INF) {
        for (j = minRow[i] + 1; j <= maxRow[i]; j++) {
          a = trans[i][j - 1];
          b = trans[i][j];
          if (rt(a) != rt(b)) fa[rt(a)] = rt(b);
          minCol[j] = min(minCol[j], i);
          maxCol[j] = max(maxCol[j], i);
        }
      }
    }
  }
  ansF = true;
  for (i = 0; i < n; i++) {
    for (j = 0; j < n; j++) {
      if (nu[i][j] && rt(trans[xx][yy]) != rt(trans[i][j])) ansF = false;
    }
  }
  ans = "";
  if (ansF) {
    dfs(xx, yy);
    cnt = 0;
    for (i = 0; i < n; i++)
      for (j = 0; j < n; j++) cnt += nu[i][j];
    if (cnt == 0)
      cout << "YES\n" << ans << endl;
    else
      cout << "NO\n";
  } else
    cout << "NO\n";
  return 0;
}
