#include <bits/stdc++.h>
using namespace std;
const long long INF = 1e18;
const long long MD = 1e9 + 7;
const double pi = acos(-1);
struct segmentTree {
  long long tl = 1, tr = (1ll << 30);
  segmentTree* left = nullptr;
  segmentTree* right = nullptr;
  long long val = 0;
  long long push = 0;
  segmentTree(long long tl, long long tr) : tl(tl), tr(tr) {}
  segmentTree() = default;
  void createSons(long long type) {
    long long tm = (tl + tr) / 2;
    if (!left && type != 1) {
      left = new segmentTree(tl, tm);
    }
    if (!right && type != 0) {
      right = new segmentTree(tm + 1, tr);
    }
  }
  void doPush() {
    if (push != 0) {
      createSons(2);
      if (tl != tr) {
        left->push += push;
        right->push += push;
      }
      val += push * (tr - tl + 1);
      push = 0;
    }
  }
  void update(long long l, long long r, long long val) {
    doPush();
    if (l > r) {
      return;
    }
    if (tl == l && tr == r) {
      push = val;
      doPush();
      return;
    }
    long long tm = (tl + tr) / 2;
    long long res = 0;
    if (l <= tm || left) {
      createSons(0);
      left->update(l, min(tm, r), val);
      res += left->val;
    }
    if (r > tm || right) {
      createSons(1);
      right->update(max(tm + 1, l), r, val);
      res += right->val;
    }
    this->val = res;
  }
  long long get(long long l, long long r) {
    doPush();
    if (l > r) {
      return 0;
    }
    if (l == tl && tr == r) {
      return val;
    }
    long long tm = (tl + tr) / 2;
    long long res = 0;
    if (l <= tm || left) {
      createSons(0);
      res += left->get(l, min(tm, r));
    }
    if (r > tm || right) {
      createSons(1);
      res += right->get(max(tm + 1, l), r);
    }
    return res;
  }
};
ostream& operator<<(ostream& stream, const vector<long long>& v) {
  for (auto i : v) {
    stream << i << "\n";
  }
  return stream;
}
pair<long long, long long> operator+=(pair<long long, long long>& a,
                                      const pair<long long, long long>& b) {
  a.first += b.first;
  a.second += b.second;
  return a;
};
long long gcd(long long a, long long b, long long& x, long long& y) {
  if (a == 0) {
    x = 0;
    y = 1;
    return b;
  }
  long long x1, y1;
  long long d = gcd(b % a, a, x1, y1);
  x = y1 - (b / a) * x1;
  y = x1;
  return d;
}
bool find_any_solution(long long a, long long b, long long c, long long& x0,
                       long long& y0, long long& g) {
  g = gcd(abs(a), abs(b), x0, y0);
  if (c % g != 0) return false;
  x0 *= c / g;
  y0 *= c / g;
  if (a < 0) x0 *= -1;
  if (b < 0) y0 *= -1;
  return true;
}
void print(long long x, long long y, long long n) {
  if (x >= 0 && y >= 0 && x + y <= n) {
    cout << x << " " << y << " " << n - (x + y) << "\n";
  } else {
    cout << -1 << "\n";
  }
}
struct str {
  long long l, r;
  char ch;
};
long long n, k;
signed main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> k;
  string st;
  cin >> st;
  long long l = 0;
  st += st;
  st += st;
  st += '!';
  vector<str> gr;
  for (long long i = 1; i < st.size(); i++) {
    if (st[i] == st[i - 1]) {
    } else {
      if (i - l >= 2) {
        gr.push_back({l, i, st[l]});
      }
      l = i;
    }
  }
  if (gr.empty()) {
    if (k % 2 == 0) {
      cout << st.substr(0, n) << "\n";
    } else {
      for (long long i = 0; i < n; i++) {
        if (st[i] == 'B') {
          cout << 'W';
        } else {
          cout << 'B';
        }
      }
    }
    return 0;
  }
  for (long long i = 0; i < (long long)gr.size() - 1; i++) {
    str cur = gr[i];
    str nxt = gr[i + 1];
    long long len = nxt.l - cur.r;
    for (long long j = cur.r; j < cur.r + min(len / 2, k); j++) {
      st[j] = cur.ch;
    }
    for (long long j = nxt.l - 1; j >= nxt.l - min(len / 2, k); j--) {
      st[j] = nxt.ch;
    }
    if (min(len / 2, k) % 2) {
      for (long long j = cur.r + min(len / 2, k); j < nxt.l - min(len / 2, k);
           j++) {
        if (st[j] == 'B') {
          st[j] = 'W';
        } else {
          st[j] = 'B';
        }
      }
    }
    if (len % 2) {
      long long ndl = len / 2 + 1;
      if (ndl <= k) {
        if (cur.ch == nxt.ch) {
          st[cur.r + ndl - 1] = cur.ch;
        }
      }
    }
  }
  for (long long i = n; i <= 2 * n - 1; i++) {
    cout << st[i];
  }
}

### Prompt

Create a solution in cpp for the following problem:

There are n chips arranged in a circle, numbered from 1 to n. 

Initially each chip has black or white color. Then k iterations occur. During each iteration the chips change their colors according to the following rules. For each chip i, three chips are considered: chip i itself and two its neighbours. If the number of white chips among these three is greater than the number of black chips among these three chips, then the chip i becomes white. Otherwise, the chip i becomes black. 

Note that for each i from 2 to (n - 1) two neighbouring chips have numbers (i - 1) and (i + 1). The neighbours for the chip i = 1 are n and 2. The neighbours of i = n are (n - 1) and 1.

The following picture describes one iteration with n = 6. The chips 1, 3 and 4 are initially black, and the chips 2, 5 and 6 are white. After the iteration 2, 3 and 4 become black, and 1, 5 and 6 become white.

<image>

Your task is to determine the color of each chip after k iterations.

Input

The first line contains two integers n and k (3 ≤ n ≤ 200 000, 1 ≤ k ≤ 10^{9}) — the number of chips and the number of iterations, respectively.

The second line contains a string consisting of n characters "W" and "B". If the i-th character is "W", then the i-th chip is white initially. If the i-th character is "B", then the i-th chip is black initially.

Output

Print a string consisting of n characters "W" and "B". If after k iterations the i-th chip is white, then the i-th character should be "W". Otherwise the i-th character should be "B".

Examples

Input


6 1
BWBBWW


Output


WBBBWW


Input


7 3
WBWBWBW


Output


WWWWWWW


Input


6 4
BWBWBW


Output


BWBWBW

Note

The first example is described in the statement.

The second example: "WBWBWBW" → "WWBWBWW" → "WWWBWWW" → "WWWWWWW". So all chips become white.

The third example: "BWBWBW" → "WBWBWB" → "BWBWBW" → "WBWBWB" → "BWBWBW".

### Response

```cpp
#include <bits/stdc++.h>
using namespace std;
const long long INF = 1e18;
const long long MD = 1e9 + 7;
const double pi = acos(-1);
struct segmentTree {
  long long tl = 1, tr = (1ll << 30);
  segmentTree* left = nullptr;
  segmentTree* right = nullptr;
  long long val = 0;
  long long push = 0;
  segmentTree(long long tl, long long tr) : tl(tl), tr(tr) {}
  segmentTree() = default;
  void createSons(long long type) {
    long long tm = (tl + tr) / 2;
    if (!left && type != 1) {
      left = new segmentTree(tl, tm);
    }
    if (!right && type != 0) {
      right = new segmentTree(tm + 1, tr);
    }
  }
  void doPush() {
    if (push != 0) {
      createSons(2);
      if (tl != tr) {
        left->push += push;
        right->push += push;
      }
      val += push * (tr - tl + 1);
      push = 0;
    }
  }
  void update(long long l, long long r, long long val) {
    doPush();
    if (l > r) {
      return;
    }
    if (tl == l && tr == r) {
      push = val;
      doPush();
      return;
    }
    long long tm = (tl + tr) / 2;
    long long res = 0;
    if (l <= tm || left) {
      createSons(0);
      left->update(l, min(tm, r), val);
      res += left->val;
    }
    if (r > tm || right) {
      createSons(1);
      right->update(max(tm + 1, l), r, val);
      res += right->val;
    }
    this->val = res;
  }
  long long get(long long l, long long r) {
    doPush();
    if (l > r) {
      return 0;
    }
    if (l == tl && tr == r) {
      return val;
    }
    long long tm = (tl + tr) / 2;
    long long res = 0;
    if (l <= tm || left) {
      createSons(0);
      res += left->get(l, min(tm, r));
    }
    if (r > tm || right) {
      createSons(1);
      res += right->get(max(tm + 1, l), r);
    }
    return res;
  }
};
ostream& operator<<(ostream& stream, const vector<long long>& v) {
  for (auto i : v) {
    stream << i << "\n";
  }
  return stream;
}
pair<long long, long long> operator+=(pair<long long, long long>& a,
                                      const pair<long long, long long>& b) {
  a.first += b.first;
  a.second += b.second;
  return a;
};
long long gcd(long long a, long long b, long long& x, long long& y) {
  if (a == 0) {
    x = 0;
    y = 1;
    return b;
  }
  long long x1, y1;
  long long d = gcd(b % a, a, x1, y1);
  x = y1 - (b / a) * x1;
  y = x1;
  return d;
}
bool find_any_solution(long long a, long long b, long long c, long long& x0,
                       long long& y0, long long& g) {
  g = gcd(abs(a), abs(b), x0, y0);
  if (c % g != 0) return false;
  x0 *= c / g;
  y0 *= c / g;
  if (a < 0) x0 *= -1;
  if (b < 0) y0 *= -1;
  return true;
}
void print(long long x, long long y, long long n) {
  if (x >= 0 && y >= 0 && x + y <= n) {
    cout << x << " " << y << " " << n - (x + y) << "\n";
  } else {
    cout << -1 << "\n";
  }
}
struct str {
  long long l, r;
  char ch;
};
long long n, k;
signed main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cin >> n >> k;
  string st;
  cin >> st;
  long long l = 0;
  st += st;
  st += st;
  st += '!';
  vector<str> gr;
  for (long long i = 1; i < st.size(); i++) {
    if (st[i] == st[i - 1]) {
    } else {
      if (i - l >= 2) {
        gr.push_back({l, i, st[l]});
      }
      l = i;
    }
  }
  if (gr.empty()) {
    if (k % 2 == 0) {
      cout << st.substr(0, n) << "\n";
    } else {
      for (long long i = 0; i < n; i++) {
        if (st[i] == 'B') {
          cout << 'W';
        } else {
          cout << 'B';
        }
      }
    }
    return 0;
  }
  for (long long i = 0; i < (long long)gr.size() - 1; i++) {
    str cur = gr[i];
    str nxt = gr[i + 1];
    long long len = nxt.l - cur.r;
    for (long long j = cur.r; j < cur.r + min(len / 2, k); j++) {
      st[j] = cur.ch;
    }
    for (long long j = nxt.l - 1; j >= nxt.l - min(len / 2, k); j--) {
      st[j] = nxt.ch;
    }
    if (min(len / 2, k) % 2) {
      for (long long j = cur.r + min(len / 2, k); j < nxt.l - min(len / 2, k);
           j++) {
        if (st[j] == 'B') {
          st[j] = 'W';
        } else {
          st[j] = 'B';
        }
      }
    }
    if (len % 2) {
      long long ndl = len / 2 + 1;
      if (ndl <= k) {
        if (cur.ch == nxt.ch) {
          st[cur.r + ndl - 1] = cur.ch;
        }
      }
    }
  }
  for (long long i = n; i <= 2 * n - 1; i++) {
    cout << st[i];
  }
}

```