func_code_string: #include <bits/stdc++.h>   using namespace std;   void _fill_int(int* p, int val, int rep) {     int i;     for (i = 0; i < rep; i++) p[i] = val;   }   signed long long GETi() {     signed long long i;     scanf( %lld , &i);     return i;   }   int N, X, Y;   int mat[501][501];   int vis[501][501];   int LM[501], RM[501], TM[501], BM[501];   char str[3000002];   char* P;   void dfs(int cy, int cx, int pre, bool on) {     char move[16] =  *LR*U***D ;     int i;     if (on && (mat[cy][cx] & 1) == 0) *P++ =  1 ;     if ((vis[cy][cx] & 1) && (pre != 1)) *P++ =  L , dfs(cy, cx - 1, 2, on);     if ((vis[cy][cx] & 2) && (pre != 2)) *P++ =  R , dfs(cy, cx + 1, 1, on);     if ((vis[cy][cx] & 4) && (pre != 4)) *P++ =  U , dfs(cy - 1, cx, 8, on);     if ((vis[cy][cx] & 8) && (pre != 8)) *P++ =  D , dfs(cy + 1, cx, 4, on);     if (!on) *P++ =  2 ;     if (pre != 0) *P++ = move[pre];   }   void solve() {     int f, i, j, k, l, x, y;     cin >> N >> Y >> X;     X--;     Y--;     for (y = 0; y < N; y++)       for (x = 0; x < N; x++) cin >> mat[y][x];     for (y = 0; y < N; y++) LM[y] = TM[y] = N, RM[y] = BM[y] = -1;     l = 0;     mat[Y][X] |= 2;     for (y = 0; y < N; y++)       for (x = 0; x < N; x++)         if (mat[y][x]) {           l++;           if (LM[y] > x) LM[y] = x;           RM[y] = x;           if (TM[x] > y) TM[x] = y;           BM[x] = y;         }     if (l == 1 && (mat[Y][X] & 1)) return (void)printf( YES n2 n );     P = str;     stack<int> Q;     Q.push(Y * 1000 + X);     while (!Q.empty()) {       int k = Q.top();       Q.pop();       int cx = k % 1000, cy = k / 1000;       TM[cx] = min(TM[cx], cy);       BM[cx] = max(BM[cx], cy);       LM[cy] = min(LM[cy], cx);       RM[cy] = max(RM[cy], cx);       for (i = 0; i < 4; i++) {         int dx[] = {0, 0, 1, -1}, dy[] = {1, -1, 0, 0};         int tx = cx + dx[i], ty = cy + dy[i];         if (tx < 0 || ty < 0 || tx >= N || ty >= N) continue;         if (dy[i] > 0 && BM[cx] < ty) continue;         if (dy[i] < 0 && TM[cx] > ty) continue;         if (dx[i] > 0 && RM[cy] < tx) continue;         if (dx[i] < 0 && LM[cy] > tx) continue;         if (mat[ty][tx] & 2) continue;         mat[ty][tx] |= 2;         if (dx[i] < 0) vis[cy][cx] |= 1, vis[ty][tx] |= 2;         if (dx[i] > 0) vis[cy][cx] |= 2, vis[ty][tx] |= 1;         if (dy[i] < 0) vis[cy][cx] |= 4, vis[ty][tx] |= 8;         if (dy[i] > 0) vis[cy][cx] |= 8, vis[ty][tx] |= 4;         Q.push(ty * 1000 + tx);       }     }     for (y = 0; y < N; y++)       for (x = 0; x < N; x++)         if (mat[y][x] == 1) return (void)printf( NO n );     dfs(Y, X, 0, true);     dfs(Y, X, 0, false);     (void)printf( YES n%s n , str);   }   int main(int argc, char** argv) {     if (argc > 1) freopen(argv[1],  r , stdin);     solve();     return 0;   }   