#include <bits/stdc++.h>
using namespace std;
pair<int, int> operator+(pair<int, int> l, pair<int, int> r) {
  return make_pair(l.first + r.first, l.second + r.second);
}
int n;
int I(pair<int, int> pos) { return pos.first * n + pos.second; }
int I(int y, int x) { return y * n + x; }
vector<int> room;
vector<bool> explr;
pair<int, int> spos;
vector<pair<int, int> > xlims, ylims;
bool valid(pair<int, int> pos, int dir) {
  if (!(0 <= pos.first && pos.first < n && 0 <= pos.second && pos.second < n))
    return false;
  if (dir == 0 && pos.second <= xlims[pos.first].second) return true;
  if (dir == 1 && pos.first <= ylims[pos.second].second) return true;
  if (dir == 2 && pos.second >= xlims[pos.first].first) return true;
  if (dir == 3 && pos.first >= ylims[pos.second].first) return true;
  return false;
}
string dir = "RDLU", history;
pair<int, int> mov[] = {make_pair(0, 1), make_pair(1, 0), make_pair(0, -1),
                        make_pair(-1, 0)};
void explore(pair<int, int> pos) {
  if (room[I(pos)] == 0) {
    room[I(pos)] = 1;
    history.push_back('1');
    xlims[pos.first] = make_pair(min(xlims[pos.first].first, pos.second),
                                 max(xlims[pos.first].second, pos.second));
    ylims[pos.second] = make_pair(min(ylims[pos.second].first, pos.first),
                                  max(ylims[pos.second].second, pos.first));
  }
  explr[I(pos)] = true;
  for (int i = 0; i < 4; i++)
    if (valid(pos + mov[i], i) && !explr[I(pos + mov[i])]) {
      history.push_back(dir[i]);
      explore(pos + mov[i]);
      history.push_back(dir[(i + 2) % 4]);
    }
}
void switchoff(pair<int, int> pos) {
  room[I(pos)] = 0;
  for (int i = 0; i < 4; i++)
    if (valid(pos + mov[i], i) && room[I(pos + mov[i])]) {
      history.push_back(dir[i]);
      switchoff(pos + mov[i]);
      history.push_back(dir[(i + 2) % 4]);
    }
  history.push_back('2');
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cin >> n;
  room.resize(n * n);
  explr.resize(n * n, false);
  cin >> spos.first >> spos.second;
  spos.first--, spos.second--;
  xlims.resize(n, make_pair(1000000000, -1));
  ylims.resize(n, make_pair(1000000000, -1));
  for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++) {
      cin >> room[I(i, j)];
      if (room[I(i, j)]) {
        xlims[i] = make_pair(min(xlims[i].first, j), max(xlims[i].second, j));
        ylims[j] = make_pair(min(ylims[j].first, i), max(ylims[j].second, i));
      }
    }
  explore(spos);
  switchoff(spos);
  if (count(room.begin(), room.end(), 1) != 0)
    cout << "NO\n";
  else {
    cout << "YES\n" << history << '\n';
  }
  return 0;
}
