#include <bits/stdc++.h>
template <typename Arg1>
void ZZ(const char* name, Arg1&& arg1) {
  std::cout << name << " = " << arg1 << std::endl;
}
template <typename Arg1, typename... Args>
void ZZ(const char* names, Arg1&& arg1, Args&&... args) {
  const char* comma = strchr(names + 1, ',');
  std::cout.write(names, comma - names) << " = " << arg1;
  ZZ(comma, args...);
}
using namespace std;
long long int to_ll(string& s) {
  long long int i, ret = 0, p = 1;
  for (i = (long long int)s.length() - 1; i >= 0; i--)
    ret += (s[i] - '0') * p, p *= 10LL;
  return ret;
}
long long int gcd(long long int x, long long int y) {
  if (y == 0) return x;
  return gcd(y, x % y);
}
long long int pwr(long long int base, long long int expo, long long int m) {
  if (base == 0) return 0LL;
  if (expo == 0) return (1LL % m);
  if ((expo & 1) == 0) {
    long long int temp = pwr(base, expo >> 1, m);
    return (temp * temp) % m;
  }
  return ((base % m) * pwr(base, expo - 1, m)) % 1000000007;
}
string s;
long long int n, k;
pair<long long int, long long int> path[1009][3009];
bool dp[1009][3009], vis[1009][3009];
bool f(long long int idx, long long int d) {
  if (idx == -1) {
    if (d == 0)
      return 1;
    else
      return 0;
  }
  if (d >= k || d <= -k) return 0;
  if (vis[idx][d + 1009] == 1) return dp[idx][d + 1009];
  vis[idx][d + 1009] = 1;
  if (s[idx] == 'W') {
    path[idx][d + 1009] = {idx - 1, d - 1};
    return dp[idx][d + 1009] = f(idx - 1, d - 1);
  } else if (s[idx] == 'L') {
    path[idx][d + 1009] = {idx - 1, d + 1};
    return dp[idx][d + 1009] = f(idx - 1, d + 1);
  } else if (s[idx] == 'D') {
    path[idx][d + 1009] = {idx - 1, d};
    return dp[idx][d + 1009] = f(idx - 1, d);
  } else {
    bool a = f(idx - 1, d - 1);
    bool b = f(idx - 1, d + 1);
    bool c = f(idx - 1, d);
    if (a == 1) {
      path[idx][d + 1009] = {idx - 1, d - 1};
      return dp[idx][d + 1009] = f(idx - 1, d - 1);
    } else if (b == 1) {
      path[idx][d + 1009] = {idx - 1, d + 1};
      return dp[idx][d + 1009] = f(idx - 1, d + 1);
    } else if (c == 1) {
      path[idx][d + 1009] = {idx - 1, d};
      return dp[idx][d + 1009] = f(idx - 1, d);
    } else {
      path[idx][d + 1009] = {-1, 0};
      return dp[idx][d + 1009] = 0;
    }
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  ;
  long long int i, j;
  string ans = "";
  cin >> n >> k;
  cin >> s;
  char ch = s[s.length() - 1];
  for (i = -k + 1; i <= k - 1; i++) {
    bool val = f(n - 2, i);
  }
  if (f(n - 2, 1 - k) == 1 && (ch != 'W' && ch != 'D')) {
    i = n - 2;
    j = 1 - k;
    ans = "L";
    while (i >= 0) {
      pair<long long int, long long int> p = path[i][j + 1009];
      if (p.second < j)
        ans += "W";
      else if (p.second > j)
        ans += "L";
      else
        ans += "D";
      i--;
      j = p.second;
    }
  } else if (f(n - 2, k - 1) == 1 && (ch != 'L' && ch != 'D')) {
    i = n - 2;
    j = k - 1;
    ans = "W";
    while (i >= 0) {
      pair<long long int, long long int> p = path[i][j + 1009];
      if (p.second < j)
        ans += "W";
      else if (p.second > j)
        ans += "L";
      else
        ans += "D";
      i--;
      j = p.second;
    }
  } else {
    cout << "NO\n";
    return 0;
  }
  reverse(((ans).begin()), ((ans).end()));
  cout << ans << "\n";
  return 0;
}
