This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
#define mp make_pair
#define pb push_back
#define endl "\n"
#define fi first
#define se second
#define SZ(x) (x).size()
#define ALL(x) (x).begin(), (x).end()
#define BIT(x, i) (((x) >> (i)) & 1)
#define MASK(x) (1LL << (x))
#define rep(i, l, r) for (int i = (l), _r = (r); i <= _r; i++)
#define rev(i, r, l) for (int i = (r), _l = (l); i >= _l; i--)
using namespace std;
typedef vector<int> vi;
typedef pair<int, int> pi;
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
template<class X, class Y> inline bool maximize(X &x, const Y &y) {return x < y ? x = y, 1 : 0;}
template<class X, class Y> inline bool minimize(X &x, const Y &y) {return x > y ? x = y, 1 : 0;}
const int MAX = 355;
const int INF = 1e9 + 7;
const int MOD = 1e9 + 7;
int num_pebble, num_red;
string pebble;
int cnt[MAX];
int f[MAX][MAX][MAX];
void input() {
    cin >> num_pebble >> num_red >> pebble;
}
void solve() {
    rep(i, 1, num_pebble) cnt[i] = cnt[i - 1] + (pebble[i] == 'C');
    rep(len, 1, num_pebble) {
        rep(u, 0, num_pebble - 1) {
            int c = u + len - 1;
            int total = 0;
            rep(i, 0, u - 1) total += (pebble[i] == 'C');
            rep(i, c + 1, num_pebble - 1) total += (pebble[i] == 'C');
            rep(k, 0, total) {
                int o = total - k;
                if (k >= num_red) f[u][c][k] = 0;
                else if (o >= num_red) f[u][c][k] = 1;
                else {
                    if (len == 1) {
                        f[u][c][k] = 0;
                        continue;
                    }
                    f[u][c][k] = (!f[u + 1][c][o] or !f[u][c - 1][o]);
                }
            }
        }
    }
    cout << (f[0][num_pebble - 1][0] ? "DA" : "NE") << endl;
}
int32_t main() {
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    #define task "kamencici"
    if (fopen(task".inp", "r")) {
        freopen(task".inp", "r", stdin);
        freopen(task".out", "w", stdout);
    }
    int test_case = 1; //cin >> test_case;
    while (test_case--) {
        input();
        solve();
    }
   cerr << "\nTime elapsed: " << clock() * 1.0 / CLOCKS_PER_SEC << " seconds" << endl;
}
Compilation message (stderr)
Main.cpp: In function 'int32_t main()':
Main.cpp:75:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   75 |         freopen(task".inp", "r", stdin);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
Main.cpp:76:16: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   76 |         freopen(task".out", "w", stdout);
      |         ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |