def change(num): re = [] for i in range(19,-1,-1): if 2**i <= num: num -= 2**i re.append(1) else: re.append(0) re.reverse() return re def go(s,g): if s[0] < g[0]: for i in range(g[0]-s[0]): ans.append('D') else: for i in range(s[0]-g[0]): ans.append('U') if s[1] < g[1]: for i in range(g[1]-s[1]): ans.append('R') else: for i in range(s[1]-g[1]): ans.append('L') n,m = map(int,input().split()) al = [] ans = [] al_two = [] now_num = 0 for i in range(n): s = [int(_) for _ in input().split()] al.append(s) other_s = [] for j in range(n): other_s.append(change(s[j])) al_two.append(other_s) now_score = 0 for i in range(n): for j in range(n): now_score += al[i][j] turn = 0 for i in range(19,18,-1): best_node = (-1,-1) best_node_num = float('inf') for j in range(n): for l in range(n): if al_two[j][l][i] == 1: if al[j][l] < best_node_num: best_node = (j,l) best_node_num = al[j][l] if turn+(best_node[0]+best_node[1]-2)*2+1 <= 1000: go((0,0),best_node) ans.append('C') now_num = al[best_node[0]][best_node[1]] # print(now_num) go(best_node,(0,0)) turn += (best_node[0]+best_node[1])*2+1 now_node=(0,0) for j in range(n): for l in range(n): if al[j][l]^now_num > al[j][l] and turn+abs(now_node[0]-j)+abs(now_node[1]-l)<=1000: go(now_node,(j,l)) turn = turn+abs(now_node[0]-j)+abs(now_node[1]-l) now_node = (j,l) if turn + 1 <= 1000: turn += 1 ans.append('W') al[j][l] = al[j][l]^now_num al_two[j][l] = change(al[j][l]) else: continue for i in ans: print(i)