#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1000000007;
const int MAX = 505;
int n, grid[MAX][MAX];
char s[5];
bool valid(int x, int y) {
  if (x < 1) return false;
  if (y < 1) return false;
  if (x > n) return false;
  if (y > n) return false;
  return true;
}
bool dist(int x1, int y1, int x2, int y2) {
  return ((abs(x1 - x2) + abs(y1 - y2)) >= n - 1);
}
bool cmd(int x1, int y1, int x2, int y2) {
  printf("? %d %d %d %d\n", x1, y1, x2, y2);
  fflush(stdout);
  scanf("%s", s);
  return (s[0] == 'Y');
}
int main() {
  scanf("%d", &n);
  grid[1][1] = 1;
  grid[n][n] = 1;
  int x = 1, y = 1;
  while (true) {
    int ok = 0;
    if (valid(x, y + 1)) {
      if (dist(x, y + 1, n, n)) {
        if (cmd(x, y + 1, n, n)) {
          grid[x][y + 1] = 1;
          ok = 1;
          y++;
        }
      }
    }
    if (ok) continue;
    if (valid(x + 1, y)) {
      if (dist(x + 1, y, n, n)) {
        if (cmd(x + 1, y, n, n)) {
          grid[x + 1][y] = 1;
          ok = 1;
          x++;
        }
      }
    }
    if (ok) continue;
    break;
  }
  x = n, y = n;
  while (true) {
    int ok = 0;
    if (valid(x - 1, y)) {
      if (dist(x - 1, y, 1, 1)) {
        if (cmd(1, 1, x - 1, y)) {
          grid[x - 1][y] = 1;
          ok = 1;
          x--;
        }
      }
    }
    if (ok) continue;
    if (valid(x, y - 1)) {
      if (dist(x, y - 1, 1, 1)) {
        if (cmd(1, 1, x, y - 1)) {
          grid[x][y - 1] = 1;
          ok = 1;
          y--;
        }
      }
    }
    if (ok) continue;
    break;
  }
  string ans = "";
  x = 1, y = 1;
  while (true) {
    if (x == n and y == n) break;
    if (grid[x][y + 1])
      ans += 'R', y++;
    else
      ans += 'D', x++;
  }
  printf("! ");
  for (int i = 0; i < ans.size(); i++) printf("%c", ans[i]);
  printf("\n");
  fflush(stdout);
  return 0;
}
