func_code_string: #include <bits/stdc++.h>   using namespace std;   const int max_n = 511, inf = 1e9 + 100;   bool m[max_n][max_n];   bool vis[max_n][max_n];   int mini[max_n], maxi[max_n];   int minj[max_n], maxj[max_n];   int si, sj;   int n;   int di[] = {0, 0, 1, -1};   int dj[] = {-1, 1, 0, 0};   char dir[] =  LRDU ;   string result;   bool on_field(int i, int j) { return i >= 0 && j >= 0 && i < n && j < n; }   void upd_mx(int i, int j) {     mini[j] = min(mini[j], i);     maxi[j] = max(maxi[j], i);     minj[i] = min(minj[i], j);     maxj[i] = max(maxj[i], j);   }   void dfs(int i, int j) {     if (vis[i][j]) {       return;     }     vis[i][j] = 1;     if (m[i][j] == 0) {       result +=  1 ;       m[i][j] = 1;       upd_mx(i, j);     }     if (on_field(i - 1, j) && !vis[i - 1][j] && mini[j] < i) {       result +=  U ;       dfs(i - 1, j);       result +=  D ;     }     if (on_field(i + 1, j) && !vis[i + 1][j] && maxi[j] > i) {       result +=  D ;       dfs(i + 1, j);       result +=  U ;     }     if (on_field(i, j - 1) && !vis[i][j - 1] && minj[i] < j) {       result +=  L ;       dfs(i, j - 1);       result +=  R ;     }     if (on_field(i, j + 1) && !vis[i][j + 1] && maxj[i] > j) {       result +=  R ;       dfs(i, j + 1);       result +=  L ;     }   }   int main() {     for (int i = 0; i < max_n; ++i) {       minj[i] = mini[i] = max_n;       maxj[i] = maxi[i] = -1;     }     cin >> n >> si >> sj;     --si, --sj;     for (int i = 0; i < n; ++i) {       for (int j = 0; j < n; ++j) {         cin >> m[i][j];         if (m[i][j] == 1) {           mini[j] = min(mini[j], i);           maxi[j] = max(maxi[j], i);           minj[i] = min(minj[i], j);           maxj[i] = max(maxj[i], j);         }       }     }     dfs(si, sj);     for (int i = 0; i < n; ++i) {       for (int j = 0; j < n; ++j) {         if (m[i][j] && !vis[i][j]) {           cout <<  NO  << endl;           return 0;         }       }     }     int fi = si, fj = sj;     while (si > 0) {       int upj = -1;       for (int j = 0; j < n; ++j) {         if (m[si][j] && m[si - 1][j]) {           upj = j;           break;         }       }       if (upj == -1) {         break;       }       while (sj < upj) {         result +=  R ;         ++sj;       }       while (sj > upj) {         result +=  L ;         --sj;       }       result +=  U ;       --si;     }     while (si < fi) {       int dj = -1;       for (int j = 0; j < n; ++j) {         if (m[si][j] && m[si + 1][j]) {           dj = j;           break;         }       }       if (dj == -1) {         break;       }       while (sj < dj) {         result +=  R ;         ++sj;       }       while (sj > dj) {         result +=  L ;         --sj;       }       while (sj > 0 && m[si][sj - 1]) {         result +=  L ;         --sj;       }       while (sj < dj) {         result +=  2 ;         result +=  R ;         ++sj;       }       while (sj + 1 < n && m[si][sj + 1]) {         result +=  R ;         ++sj;       }       while (sj > dj) {         result +=  2 ;         result +=  L ;         --sj;       }       result +=  2 ;       result +=  D ;       ++si;     }     while (si + 1 < n) {       int dj = -1;       for (int j = 0; j < n; ++j) {         if (m[si][j] && m[si + 1][j]) {           dj = j;           break;         }       }       if (dj == -1) {         break;       }       while (sj < dj) {         result +=  R ;         ++sj;       }       while (sj > dj) {         result +=  L ;         --sj;       }       result +=  D ;       ++si;     }     while (si > fi) {       int upj = -1;       for (int j = 0; j < n; ++j) {         if (m[si][j] && m[si - 1][j]) {           upj = j;           break;         }       }       if (upj == -1) {         break;       }       while (sj < upj) {         result +=  R ;         ++sj;       }       while (sj > upj) {         result +=  L ;         --sj;       }       while (sj > 0 && m[si][sj - 1]) {         result +=  L ;         --sj;       }       while (sj < upj) {         result +=  2 ;         result +=  R ;         ++sj;       }       while (sj + 1 < n && m[si][sj + 1]) {         result +=  R ;         ++sj;       }       while (sj > upj) {         result +=  2 ;         result +=  L ;         --sj;       }       result +=  2 ;       result +=  U ;       --si;     }     while (sj < fj) {       result +=  R ;       ++sj;     }     while (sj > fj) {       result +=  L ;       --sj;     }     while (sj > 0 && m[si][sj - 1]) {       result +=  L ;       --sj;     }     while (sj < fj) {       result +=  2 ;       result +=  R ;       ++sj;     }     while (sj + 1 < n && m[si][sj + 1]) {       result +=  R ;       ++sj;     }     while (sj > fj) {       result +=  2 ;       result +=  L ;       --sj;     }     result +=  2 ;     if (result.size() > 2e6) {       exit(228);     }     cout <<  YES  << endl;     cout << result << endl;     return 0;   }   