#include <bits/stdc++.h>
using namespace std;
template <typename T>
bool mmax(T &m, const T q) {
  if (m < q) {
    m = q;
    return true;
  } else
    return false;
}
template <typename T>
bool mmin(T &m, const T q) {
  if (m > q) {
    m = q;
    return true;
  } else
    return false;
}
const int MOD = 1e9 + 7;
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  int N, K;
  cin >> N >> K;
  string S;
  cin >> S;
  if (N == 1) {
    if (K == 1) {
      if (S[0] == 'D') do {
          cout << "NO" << '\n';
          return 0;
        } while (0);
      if (S[0] == '?') S[0] = 'W';
      cout << S << '\n';
      return 0;
    } else
      do {
        cout << "NO" << '\n';
        return 0;
      } while (0);
  }
  string ans(N, ' ');
  vector<map<int, char>> trace(N);
  set<pair<int, int>> seen;
  int offset = 0;
  queue<pair<int, int>> qu;
  if (S[0] == 'W' || S[0] == '?') {
    if (K != 1) {
      qu.push({0, 1});
      trace[0][offset + 1] = 'W';
      seen.insert({0, 1});
    }
  } else if (S[0] == 'D' || S[0] == '?') {
    qu.push({0, 0});
    trace[0][offset] = 'D';
    seen.insert({0, 0});
  } else if (S[0] == 'L' || S[0] == '?') {
    if (K != 1) {
      qu.push({0, -1});
      trace[0][offset - 1] = 'L';
      seen.insert({0, -1});
    }
  }
  while (qu.size()) {
    auto p = qu.front();
    qu.pop();
    int idx = p.first;
    int k = p.second;
    if (idx == N - 1) continue;
    if (S[idx + 1] == 'W' || S[idx + 1] == '?') {
      if ((k != K - 1 || idx + 1 == N - 1) && !seen.count({idx + 1, k + 1})) {
        qu.push({idx + 1, k + 1});
        trace[idx + 1][offset + k + 1] = 'W';
        seen.insert({idx + 1, k + 1});
      }
    }
    if ((S[idx + 1] == 'D' || S[idx + 1] == '?') && !seen.count({idx + 1, k})) {
      qu.push({idx + 1, k});
      trace[idx + 1][offset + k] = 'D';
      seen.insert({idx + 1, k});
    }
    if ((S[idx + 1] == 'L' || S[idx + 1] == '?') &&
        !seen.count({idx + 1, k - 1})) {
      if (k != -(K - 1) || idx + 1 == N - 1) {
        qu.push({idx + 1, k - 1});
        trace[idx + 1][offset + k - 1] = 'L';
        seen.insert({idx + 1, k - 1});
      }
    }
  }
  auto run = [&](int kk) {
    for (int i = (int)(N - 1); i >= 0; --i) {
      char c = trace[i][offset + kk];
      assert(c != ' ');
      ans[i] = c;
      if (c == 'W')
        kk--;
      else if (c == 'L')
        kk++;
    }
    assert(kk == 0);
  };
  if (trace[N - 1][offset + K]) {
    run(K);
    cout << ans << '\n';
  } else if (trace[N - 1][offset - K]) {
    run(-K);
    cout << ans << '\n';
  } else
    do {
      cout << "NO" << '\n';
      return 0;
    } while (0);
  return 0;
}
