#include using namespace std; int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); // 盤面サイズ N と操作上限 T を読み込む int N, T; cin >> N >> T; // この入力を忘れるとずれて読み込まれます // 盤面を読み込む vector> A(N, vector(N)); for(int i = 0; i < N; i++){ for(int j = 0; j < N; j++){ cin >> A[i][j]; } } // 1) 盤面内の最大値を求める uint32_t maxVal = 0; for(int i = 0; i < N; i++){ for(int j = 0; j < N; j++){ maxVal = max(maxVal, A[i][j]); } } // 2) 最大値セルのうち (0,0) からのマンハッタン距離が最小のセルを選ぶ int im = 0, jm = 0; int minDist = INT_MAX; for(int i = 0; i < N; i++){ for(int j = 0; j < N; j++){ if(A[i][j] == maxVal){ int d = i + j; // (0,0) からの距離 if(d < minDist){ minDist = d; im = i; jm = j; } } } } // 3) 操作シーケンスと現在位置を用意 vector ops; int x = 0, y = 0; // 現在位置 (行,列) // (x,y) -> (tx,ty) へ移動するヘルパー auto move_to = [&](int tx, int ty){ while(x < tx){ ops.push_back('D'); x++; } while(x > tx){ ops.push_back('U'); x--; } while(y < ty){ ops.push_back('R'); y++; } while(y > ty){ ops.push_back('L'); y--; } }; // 4) 最大値セルへ移動して C 操作 move_to(im, jm); ops.push_back('C'); uint32_t s = A[im][jm]; // 手元のコピー値 // 5) スタート (0,0) へ戻る move_to(0, 0); // 6) 蛇行走査で全セルを訪問し、XOR 後のほうが大きければ W 操作 for(int i = 0; i < N; i++){ if(i % 2 == 0){ // 偶数行は左→右 for(int j = 0; j < N; j++){ if(i != 0 || j != 0) move_to(i, j); uint32_t v0 = A[i][j], v1 = v0 ^ s; if(v1 > v0) ops.push_back('W'); } } else { // 奇数行は右→左 for(int j = N - 1; j >= 0; j--){ move_to(i, j); uint32_t v0 = A[i][j], v1 = v0 ^ s; if(v1 > v0) ops.push_back('W'); } } } // 7) 出力 (1 行に 1 操作ずつ) for(char c : ops){ cout << c << "\n"; } return 0; }