#include <bits/stdc++.h>
using namespace std;
int n, k, b[200005];
vector<pair<int, int> > v, v2;
set<pair<int, int> > st;
string s;
bool g[505][505];
bool ask(int r1, int c1, int r2, int c2) {
  if ((r2 - r1) + (c2 - c1) < n - 1) return false;
  cout << "? " << r1 << " " << c1 << " " << r2 << " " << c2 << endl;
  cout.flush();
  cin >> s;
  if (s == "BAD") assert(-1);
  return s == "YES";
}
bool check(int x, int y) {
  return x <= n && x >= 1 && y >= 1 && y <= n && !st.count(make_pair(x, y));
}
bool connected(int x, int y) {
  for (int i = 0; i < v.size(); i++) {
    int dx = x - v[i].first;
    int dy = y - v[i].second;
    if (dx < 0 || dy < 0) continue;
    if (dx + dy == 1) return true;
  }
  return false;
}
pair<int, int> closest(int x, int y) {
  pair<int, int> res;
  res.first = -1;
  for (int i = 1; i < v.size(); i++) {
    int dx = x - v[i].first;
    int dy = y - v[i].second;
    if (dx < 0 || dy < 0) continue;
    if ((x - v[i].first) + (y - v[i].second) < n - 1) continue;
    if (res.first == -1)
      res = v[i];
    else if (dx + dy < (x - res.first) + (y - res.second)) {
      res = v[i];
    }
  }
  return res;
}
string dfs(string u, int x, int y) {
  if (x < 1 || x > n || y < 1 || y > n) return "";
  if (!g[x][y]) return "";
  if (x == n && y == n) return u;
  string x2 = dfs("D", x + 1, y);
  if (x2 != "") {
    return u + x2;
  }
  x2 = dfs("R", x, y + 1);
  if (x2 != "") {
    return u + x2;
  }
  return "";
}
int main() {
  cin >> n;
  int x = 1, y = 1;
  v.push_back(make_pair(x, y));
  int nx = x, ny = y + 1;
  while (x + y != n + 1) {
    if (check(nx, ny) && ask(nx, ny, n, n)) {
      st.insert(make_pair(nx, ny));
      x = nx;
      y = ny;
      v.push_back(make_pair(x, y));
    } else {
      y = y;
      x = x + 1;
      v.push_back(make_pair(x, y));
      st.insert(make_pair(x, y));
    }
    nx = x;
    ny = y + 1;
  }
  int xx = x;
  int yy = y;
  x = n, y = n;
  int xp, yp;
  if (xx > yy) {
    xp = 0;
    yp = 1;
  } else {
    xp = 1;
    yp = 0;
  }
  while (x + y > n) {
    int nx = x - xp;
    int ny = y - yp;
    bool b = false;
    if (check(nx, ny) && nx >= xx && ny >= yy) {
      st.insert(make_pair(nx, ny));
      if (ask(1, 1, nx, ny)) {
        b = true;
        v2.push_back(make_pair(nx, ny));
      }
    }
    if (!b) {
      nx = x - yp;
      ny = y - xp;
      if (!ask(1, 1, nx, ny)) break;
      st.insert(make_pair(nx, ny));
      v2.push_back(make_pair(nx, ny));
      if (connected(nx, ny)) break;
    }
    x = nx;
    y = ny;
  }
  for (int i = 0; i < v.size(); i++) {
    g[v[i].first][v[i].second] = true;
  }
  for (int i = 0; i < v2.size(); i++) {
    g[v2[i].first][v2[i].second] = true;
  }
  g[1][1] = true;
  g[n][n] = true;
  cout << "! " << dfs("", 1, 1) << endl;
  cout.flush();
  return 0;
}
