#include <bits/stdc++.h>
using namespace std;
struct st {
  int r, c;
};
int n;
bool a[510][510];
stack<st> s;
bool f(int r, int c) {
  bool find = false;
  if (r == n && c == n) return true;
  if (a[r + 1][c]) find |= f(r + 1, c);
  if (a[r][c + 1]) find |= f(r, c + 1);
  if (!find) a[r][c] = false;
  return find;
}
int main() {
  scanf("%d", &n);
  s.push({1, 1});
  a[1][1] = a[n][n] = true;
  for (int i = 0; i < n - 1; ++i) {
    char ans[10];
    st &now = s.top();
    printf("? %d %d %d %d\n", now.r, now.c + 1, n, n);
    fflush(stdout);
    scanf("%s", ans);
    if (ans[0] == 'Y') {
      s.push({now.r, now.c + 1});
      a[now.r][now.c + 1] = true;
    } else if (ans[0] == 'N') {
      s.push({now.r + 1, now.c});
      a[now.r + 1][now.c] = true;
    } else
      return 0;
  }
  s.pop();
  st to = {n, n};
  for (int i = 0; i < n - 1; ++i) {
    char ans[10];
    st &from = s.top();
    printf("? %d %d %d %d\n", from.r, from.c, to.r - 1, to.c);
    fflush(stdout);
    scanf("%s", ans);
    if (ans[0] == 'Y')
      --to.r;
    else if (ans[0] == 'N')
      --to.c;
    else
      return 0;
    s.pop();
    a[to.r][to.c] = true;
  }
  f(1, 1);
  printf("! ");
  st now = {1, 1};
  while (now.r != n || now.c != n) {
    if (a[now.r + 1][now.c]) {
      printf("D");
      ++now.r;
    } else {
      printf("R");
      ++now.c;
    }
  }
  fflush(stdout);
  return 0;
}
