#include <bits/stdc++.h>
using namespace std;
const int MAX = 505;
int dx[] = {0, 0, 1, -1};
int dy[] = {1, -1, 0, 0};
char dc[] = {'R', 'L', 'D', 'U'};
string ans;
int n;
bool grid[MAX][MAX], vis[MAX][MAX];
int dp[MAX][MAX][4];
bool valid(int x, int y, int dir) {
  return dp[x][y][dir] = ~dp[x][y][dir]                 ? dp[x][y][dir]
                         : (!x || !y || x > n || y > n) ? 0
                         : grid[x][y]                   ? 1
                                      : valid(x + dx[dir], y + dy[dir], dir);
}
void dfs1(int x, int y) {
  vis[x][y] = 1;
  if (!grid[x][y]) ans += '1', grid[x][y] = 1;
  for (int i = 0; i < 4; ++i) {
    int nx = x + dx[i], ny = y + dy[i];
    if (vis[nx][ny] || !valid(nx, ny, i)) continue;
    ans += dc[i];
    dfs1(nx, ny);
    ans += dc[i ^ 1];
  }
}
void dfs0(int x, int y) {
  grid[x][y] = 0;
  for (int i = 0; i < 4; ++i) {
    int nx = x + dx[i], ny = y + dy[i];
    if (!grid[nx][ny]) continue;
    ans += dc[i];
    dfs0(nx, ny);
    ans += dc[i ^ 1];
  }
  ans += '2';
}
int main() {
  int sx, sy;
  memset(dp, -1, sizeof dp);
  cin >> n >> sx >> sy;
  for (int i = 1; i <= n; ++i) {
    vis[0][i] = vis[i][0] = vis[0][n + 1] = vis[n + 1][0] = 1;
    for (int j = 1; j <= n; ++j) scanf("%d", grid[i] + j);
  }
  dfs1(sx, sy);
  dfs0(sx, sy);
  for (int i = 1; i <= n; ++i)
    for (int j = 1; j <= n; ++j)
      if (grid[i][j]) return puts("NO"), 0;
  puts("YES");
  puts(ans.c_str());
  return 0;
}
