#include <bits/stdc++.h>
using namespace std;
const long long int MOD = 1000000007;
long long int N, M, K, H, W, L, R;
class Segment_Tree {
  vector<long long int> v;
  vector<int> l;
  vector<int> r;
  int num;
  long long int ret;
  bool is_min;
  long long int Update(int place) {
    if (place >= v.size() / 2) {
      return v[place];
    }
    if (is_min) {
      v[place] = min(Update(place * 2), Update(place * 2 + 1));
      return v[place];
    }
    v[place] = max(Update(place * 2), Update(place * 2 + 1));
    return v[place];
  }
  void RMQ(int a, int b, int place) {
    if (l[place] >= a && r[place] <= b) {
      if (is_min)
        ret = min(ret, v[place]);
      else
        ret = max(ret, v[place]);
      return;
    }
    if (l[place] > b || r[place] < a) return;
    RMQ(a, b, place * 2);
    RMQ(a, b, place * 2 + 1);
    return;
  }

 public:
  void Left(int place) {
    if (place >= v.size() / 2) {
      l[place] = place - v.size() / 2;
      return;
    }
    Left(place * 2);
    Left(place * 2 + 1);
    l[place] = l[place * 2];
    return;
  }
  void Right(int place) {
    if (place >= v.size() / 2) {
      r[place] = place - v.size() / 2;
      return;
    }
    Right(place * 2);
    Right(place * 2 + 1);
    r[place] = r[place * 2 + 1];
    return;
  }
  Segment_Tree(int n, bool min) {
    n++;
    num = 1;
    while (num < n * 2) {
      num *= 2;
    }
    l.resize(num);
    r.resize(num);
    is_min = min;
    if (min) {
      v.resize(num, LLONG_MAX);
    } else
      v.resize(num, LLONG_MIN);
    Left(1);
    Right(1);
  }
  void Insert(int place, long long int num, bool update) {
    place += v.size() / 2;
    v[place] = num;
    if (!update) return;
    place /= 2;
    while (place) {
      if (is_min)
        v[place] = min(v[place * 2], v[place * 2 + 1]);
      else
        v[place] = max(v[place * 2], v[place * 2 + 1]);
      place /= 2;
    }
  }
  void TopDown() { Update(1); }
  long long int RMQ(int a, int b) {
    if (is_min)
      ret = LLONG_MAX;
    else
      ret = LLONG_MIN;
    RMQ(a, b, 1);
    return ret;
  }
};
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cin >> N;
  int sx = 1, sy = 1, gx = N, gy = N;
  int cx = 1, cy = 1;
  string ans;
  string add;
  while (gx + gy - cx - cy >= N) {
    cout << "? " << cy + 1 << " " << cx << " " << gy << " " << gx << endl;
    string s;
    cin >> s;
    if (s == "YES") {
      ans.push_back('D');
      cy++;
    } else {
      ans.push_back('R');
      cx++;
    }
  }
  cy = N;
  cx = N;
  while (cy + cx - sx - sy >= N) {
    cout << "? " << sy << " " << sx << " " << cy << " " << cx - 1 << endl;
    string s;
    cin >> s;
    if (s == "YES") {
      add = 'R' + add;
      cx--;
    } else {
      add = 'D' + add;
      cy--;
    }
  }
  cout << "! " << ans << add << endl;
  return 0;
}
