#include <bits/stdc++.h>
using namespace std;
template <typename T>
using vc = vector<T>;
using pii = pair<long long, long long>;
void xmax(long long& a, long long b) { a = max(a, b); }
void xmin(long long& a, long long b) { a = min(a, b); }
void print(vc<long long>& a, string second) {
  cerr << "prinitng " << second << "\n";
  for (long long i = 0; i < a.size(); i++) {
    cerr << a[i] << " ";
  }
  cerr << endl;
}
long long n;
vc<vc<long long> > a, vis;
vc<char> to_do;
long long krat;
vc<vc<char> > was = {{'X', 'U', 'X'}, {'L', 'X', 'R'}, {'X', 'D', 'X'}};
vc<vc<char> > en_was = {{'X', 'D', 'X'}, {'R', 'X', 'L'}, {'X', 'U', 'X'}};
vc<set<long long> > col, row, col_soll, row_soll;
void dfs(long long x, long long y, long long dirx, long long diry) {
  if (x < 0 || x >= n || y < 0 || y >= n || vis[x][y]) return;
  to_do.push_back(was[1 + dirx][1 + diry]);
  krat++;
  vis[x][y] = krat;
  if (a[x][y] == 0) {
    to_do.push_back('1');
  } else {
    a[x][y] = 0;
  }
  col[y].insert(x);
  row[x].insert(y);
  auto tap = col[y].lower_bound(x);
  if (tap != col[y].begin()) {
    dfs(x - 1, y, -1, 0);
  }
  tap = col[y].lower_bound(x);
  tap++;
  if (tap != col[y].end()) {
    dfs(x + 1, y, 1, 0);
  }
  tap = row[x].lower_bound(y);
  if (tap != row[x].begin()) dfs(x, y - 1, 0, -1);
  tap = row[x].lower_bound(y);
  tap++;
  if (tap != row[x].end()) dfs(x, y + 1, 0, 1);
  to_do.push_back(en_was[1 + dirx][1 + diry]);
  krat++;
}
void find_wohin(long long& x, long long& y, char d, vc<char>& ba) {
  if (d == 'U') {
    x++;
    ba.push_back('D');
  }
  if (d == 'D') {
    x--;
    ba.push_back('U');
  }
  if (d == 'L') {
    y++;
    ba.push_back('R');
  }
  if (d == 'R') {
    y--;
    ba.push_back('L');
  }
}
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  to_do.clear();
  cin >> n;
  long long x, y;
  cin >> x >> y;
  x--;
  y--;
  vis = a = vc<vc<long long> >(n, vc<long long>(n));
  col = row = col_soll = row_soll = vc<set<long long> >(n);
  for (long long i = 0; i < n; i++) {
    for (long long j = 0; j < n; j++) {
      cin >> a[i][j];
      if (i == x && j == y) {
        if (a[i][j] == 0) {
          to_do.push_back('1');
          a[i][j] = 1;
        }
      }
      if (a[i][j]) {
        col[j].insert(i);
        row[i].insert(j);
      }
    }
  }
  krat = 0;
  dfs(x, y, 0, 0);
  long long geht = 1;
  cerr << "a afterwards: " << endl;
  for (long long i = 0; i < n; i++) {
    for (long long j = 0; j < n; j++) {
      if (a[i][j] != 0) geht = 0;
    }
  }
  if (!geht) {
    cout << "NO\n";
  } else {
    cout << "YES\n";
    long long kratii = krat - 1;
    vc<char> ba;
    long long l = to_do.size();
    for (long long i = l - 1; i >= 0; i--) {
      if (to_do[i] == '1' || to_do[i] == '2') continue;
      find_wohin(x, y, to_do[i], ba);
      kratii--;
      if (x < 0 || x >= n || y < 0 || y >= n) {
        cerr << "the s of l" << endl;
        while (true)
          ;
      }
      if (vis[x][y] == kratii + 1) {
        ba.push_back('2');
      }
    }
    for (long long i = 0; i + 1 < to_do.size(); i++) {
      if (to_do[i] == 'X') continue;
      cout << to_do[i];
    }
    for (long long i = 0; i < ba.size(); i++) {
      cout << ba[i];
    }
    cout << endl;
  }
}
