#include <bits/stdc++.h>
using namespace std;
int dx[] = {0, 0, +1, -1};
int dy[] = {+1, -1, 0, 0};
inline bool EQ(double a, double b) { return fabs(a - b) < 1e-9; }
int biton(int N, int pos) { return N = N | (1 << pos); }
int bitoff(int N, int pos) { return N = N & ~(1 << pos); }
bool check(int N, int pos) { return (bool)(N & (1 << pos)); }
int n, k, w, l;
int dp[1009][2002];
string s;
int call(int i, int val) {
  if (i == n)
    if (abs(val) == k)
      return 1;
    else
      return 0;
  if (abs(val) == k) return 0;
  int &ret = dp[i][val];
  if (ret != -1) return ret;
  int ans = 0;
  if (s[i] == '?') {
    ans |= call(i + 1, val + 1);
    ans |= call(i + 1, val - 1);
    ans |= call(i + 1, val);
  }
  if (s[i] == 'W') ans |= call(i + 1, val + 1);
  if (s[i] == 'L') ans |= call(i + 1, val - 1);
  if (s[i] == 'D') ans = call(i + 1, val);
  return ret = ans;
}
string creat;
void build(int i, int val) {
  if (i == n) return;
  int ans = call(i, val);
  if (s[i] == 'W' and ans == call(i + 1, val + 1)) {
    creat += 'W';
    build(i + 1, val + 1);
    return;
  }
  if (s[i] == 'D' and ans == call(i + 1, val)) {
    creat += 'D';
    build(i + 1, val);
    return;
  }
  if (s[i] == 'L' and ans == call(i + 1, val - 1)) {
    creat += 'L';
    build(i + 1, val - 1);
    return;
  }
  if (s[i] == '?') {
    if (ans == call(i + 1, val + 1)) {
      creat += 'W';
      build(i + 1, val + 1);
      return;
    }
    if (ans == call(i + 1, val - 1)) {
      creat += 'L';
      build(i + 1, val - 1);
      return;
    }
    if (ans == call(i + 1, val)) {
      creat += 'D';
      build(i + 1, val);
      return;
    }
    return;
  }
}
int main() {
  scanf("%d%d", &n, &k);
  cin >> s;
  memset(dp, -1, sizeof(dp));
  if (!call(0, 0)) return printf("NO\n"), 0;
  build(0, 0);
  cout << creat << endl;
}
