#include <bits/stdc++.h>
using namespace std;
const int N = (int)1e6 + 123;
const long long INF = (long long)1e18 + 123;
const int inf = (int)1e9 + 123;
const int MOD = (int)1e9 + 7;
void megaRandom() {
  unsigned int FOR;
  asm("rdtsc" : "=A"(FOR));
  srand(FOR);
}
int n, k;
bool dp[1111][1111][5];
char a[1111];
pair<pair<int, int>, int> par[1111][1111][5];
char ch[1111];
void no() {
  puts("NO");
  exit(0);
}
void out() {
  int bal = 0;
  for (int i = 1; i <= n; i++) {
    if (ch[i] == 'L') bal--;
    if (ch[i] == 'W') bal++;
    if (abs(bal) >= k && i < n) no();
  }
  if (abs(bal) != k) {
    memset(ch, 0, sizeof ch);
    return;
  }
  for (int i = 1; i <= n; i++) cout << ch[i];
  exit(0);
}
char type[] = {'L', 'W'};
void restore(int x, int y, int z) {
  while (x > 0) {
    int to_x = par[x][y][z].first.first, to_y = par[x][y][z].first.second,
        to_z = par[x][y][z].second;
    if (to_x == -1) break;
    if (a[x] != '?')
      ch[x] = a[x];
    else {
      if (z != to_z) {
        assert(to_y < y);
        ch[x] = type[z];
      } else {
        if (to_y == y) ch[x] = 'D';
        if (to_y < y) ch[x] = type[z];
        if (to_y > y) ch[x] = type[(z ^ 1)];
      }
    }
    x = to_x, y = to_y, z = to_z;
  }
}
int main() {
  megaRandom();
  cin >> n >> k;
  for (int i = 1; i <= n; i++) cin >> a[i];
  memset(par, -1, sizeof par);
  dp[0][0][0] = dp[0][0][1] = 1;
  for (int i = 0; i < n; i++) {
    for (int dif = 0; dif < k; dif++) {
      if (dp[i][dif][0]) {
        if (a[i + 1] == 'L' || a[i + 1] == '?') {
          dp[i + 1][dif + 1][0] = 1;
          par[i + 1][dif + 1][0] = make_pair(make_pair(i, dif), 0);
        }
        if (a[i + 1] == 'W' || a[i + 1] == '?') {
          if (dif) {
            dp[i + 1][dif - 1][0] = 1;
            par[i + 1][dif - 1][0] = make_pair(make_pair(i, dif), 0);
          } else {
            dp[i + 1][1][1] = 1;
            par[i + 1][1][1] = make_pair(make_pair(i, dif), 0);
          }
        }
        if (a[i + 1] == 'D' || a[i + 1] == '?') {
          dp[i + 1][dif][0] = 1;
          par[i + 1][dif][0] = make_pair(make_pair(i, dif), 0);
        }
      }
      if (dp[i][dif][1]) {
        if (a[i + 1] == 'L' || a[i + 1] == '?') {
          if (dif) {
            dp[i + 1][dif - 1][1] = 1;
            par[i + 1][dif - 1][1] = make_pair(make_pair(i, dif), 1);
          } else {
            dp[i + 1][1][0] = 1;
            par[i + 1][1][0] = make_pair(make_pair(i, dif), 1);
          }
        }
        if (a[i + 1] == 'W' || a[i + 1] == '?') {
          dp[i + 1][dif + 1][1] = 1;
          par[i + 1][dif + 1][1] = make_pair(make_pair(i, dif), 1);
        }
        if (a[i + 1] == 'D' || a[i + 1] == '?') {
          dp[i + 1][dif][1] = 1;
          par[i + 1][dif][1] = make_pair(make_pair(i, dif), 1);
        }
      }
    }
  }
  restore(n, k, 0);
  bool ok = 1;
  for (int i = 1; i <= n; i++)
    if (!ch[i]) ok = 0;
  if (ok) out();
  memset(ch, 0, sizeof ch);
  restore(n, k, 1);
  ok = 1;
  for (int i = 1; i <= n; i++)
    if (!ch[i]) ok = 0;
  if (ok) out();
  no();
}
