#include <bits/stdc++.h>
const long long maxn = 1e4 + 10;
inline long long Max(long long a, long long b) { return a > b ? a : b; }
inline long long Min(long long a, long long b) { return a > b ? b : a; }
namespace FastIO {
inline long long read() {
  long long f = 1, r = 0;
  char c = getchar();
  while (!isdigit(c)) {
    if (c == '-') {
      f = -1;
    }
    c = getchar();
  }
  while (isdigit(c)) {
    r = 10 * r + c - '0';
    c = getchar();
  }
  return f * r;
}
inline void write(long long x) {
  if (x < 0) putchar('-'), x = -x;
  if (x > 9) write(x / 10);
  putchar(x % 10 + '0');
}
inline void writesp(long long x) { write(x), putchar(' '); }
inline void writeln(long long x) { write(x), puts(""); }
};  // namespace FastIO
using namespace FastIO;
long long N;
inline bool ask(long long x1, long long y1, long long x2, long long y2) {
  putchar('?'), putchar(' ');
  writesp(x1), writesp(y1), writesp(x2), writeln(y2);
  fflush(stdout);
  std::string s;
  std::cin >> s;
  return s == "YES";
}
signed main() {
  std::cin >> N;
  long long nowx = 1, nowy = 1;
  std::string s1 = "";
  while (true) {
    if (nowx + nowy == N + 1) {
      break;
    }
    if (nowx == N) {
      nowy++, s1.push_back('R');
    } else if (nowy == N) {
      nowx++, s1.push_back('D');
    } else {
      if (ask(nowx + 1, nowy, N, N)) {
        nowx++, s1.push_back('D');
      } else {
        nowy++, s1.push_back('R');
      }
    }
  }
  nowx = N, nowy = N;
  std::string s2 = "";
  while (true) {
    if (nowx + nowy == N + 1) {
      break;
    }
    if (nowx == 1) {
      nowy--, s2.push_back('R');
    } else if (nowy == 1) {
      nowx--, s2.push_back('D');
    } else {
      if (ask(1, 1, nowx, nowy - 1)) {
        nowy--, s2.push_back('R');
      } else {
        nowx--, s2.push_back('D');
      }
    }
  }
  std::reverse(s2.begin(), s2.end());
  putchar('!'), putchar(' ');
  std::string res = s1 + s2;
  std::cout << res << std::endl;
  return 0;
}
