#include <bits/stdc++.h>
using namespace std;
template <class C>
void mini(C& a4, C b4) {
  a4 = min(a4, b4);
}
template <class C>
void maxi(C& a4, C b4) {
  a4 = max(a4, b4);
}
template <class T1, class T2>
ostream& operator<<(ostream& out, pair<T1, T2> pair) {
  return out << "(" << pair.first << ", " << pair.second << ")";
}
int n, k;
char s[1010];
int dp[1010][2010];
int p[1010][2010];
int offset(int x) {
  if (x >= 0) return x + 1000;
  return -x;
}
bool f(int i, int w) {
  if (i == n) {
    if (w == k || w == -k) return 1;
    return 0;
  }
  if (w == k || w == -k) return 0;
  if (dp[i][offset(w)] != -1) return dp[i][offset(w)];
  bool ans = 0;
  if (s[i] == '?') {
    if (w < k) {
      bool par = f(i + 1, w + 1);
      if (par) {
        p[i][offset(w)] = 1;
        ans = 1;
      }
    }
    if (w > -k) {
      bool par = f(i + 1, w - 1);
      if (par) {
        p[i][offset(w)] = -1;
        ans = 1;
      }
    }
    bool par = f(i + 1, w);
    if (par) {
      p[i][offset(w)] = 0;
      ans = 1;
    }
    return dp[i][offset(w)] = ans;
  } else {
    if (s[i] == 'W') {
      p[i][offset(w)] = 1;
      return dp[i][offset(w)] = f(i + 1, w + 1);
    } else {
      if (s[i] == 'L') {
        p[i][offset(w)] = -1;
        return dp[i][offset(w)] = f(i + 1, w - 1);
      } else {
        p[i][offset(w)] = 0;
        return dp[i][offset(w)] = f(i + 1, w);
      }
    }
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> k;
  cin >> s;
  memset(dp, -1, sizeof dp);
  memset(p, -1, sizeof p);
  bool ans = f(0, 0);
  if (!ans) {
    cout << "NO\n";
  } else {
    int c;
    int cur = 0;
    for (int i = (0); i < (n); i++) {
      c = p[i][offset(cur)];
      if (s[i] == '?') {
        if (c == 1) cout << "W";
        if (c == 0) cout << "D";
        if (c == -1) cout << "L";
      } else {
        cout << s[i];
      }
      cur = cur + c;
    }
  }
  return 0;
}
