#include <bits/stdc++.h>
using namespace std;
const int MAXN = 505;
struct dot {
  int x, y;
  dot(int x = 0, int y = 0) : x(x), y(y) {}
};
int n;
string B[MAXN];
bool ask(dot a, dot b) {
  printf("? %d %d %d %d\n", a.x, a.y, b.x, b.y);
  fflush(stdout);
  char S[5];
  scanf("%s", &S);
  string SS = S;
  return (SS == "YES");
}
dot st;
void av() {
  dot nxt = st;
  nxt.y++;
  if (ask(nxt, dot(n, n))) {
    B[st.x][st.y] = 'R';
    st = nxt;
  } else {
    B[st.x][st.y] = 'D';
    st.x++;
  }
}
dot fn;
void ret() {
  dot nxt = fn;
  nxt.x--;
  if (ask(dot(1, 1), nxt)) {
    B[nxt.x][nxt.y] = 'D';
    fn = nxt;
  } else {
    nxt = fn;
    nxt.y--;
    B[nxt.x][nxt.y] = 'R';
    fn = nxt;
  }
}
string Ans;
void recover() {
  Ans.clear();
  st = dot(1, 1);
  while (st.x < n || st.y < n) {
    char c = B[st.x][st.y];
    Ans.push_back(c);
    if (c == 'R')
      st.y++;
    else
      st.x++;
  };
}
int main() {
  while (scanf("%d", &n) >= 1) {
    for (int i = (0); i < (int)(MAXN); i++) B[i] = string(MAXN, '.');
    st = dot(1, 1);
    while (st.x + st.y < n + 1) av();
    fn = dot(n, n);
    while (fn.x + fn.y > n + 1) ret();
    recover();
    cout << "! " << Ans << endl;
  }
  return 0;
}
