Problem:
Score : 500 points

Problem Statement

Takahashi has decided to work on K days of his choice from the N days starting with tomorrow.

You are given an integer C and a string S. Takahashi will choose his workdays as follows:

After working for a day, he will refrain from working on the subsequent C days.

If the i-th character of S is x, he will not work on Day i, where Day 1 is tomorrow, Day 2 is the day after tomorrow, and so on.

Find all days on which Takahashi is bound to work.

Constraints

1 \leq N \leq 2 \times 10^5

1 \leq K \leq N

0 \leq C \leq N

The length of S is N.

Each character of S is o or x.

Takahashi can choose his workdays so that the conditions in Problem Statement are satisfied.

Input

Input is given from Standard Input in the following format:

N K C
S

Output

Print all days on which Takahashi is bound to work in ascending order, one per line.

Sample Input 1

11 3 2
ooxxxoxxxoo

Sample Output 1

6

Takahashi is going to work on 3 days out of the 11 days. After working for a day, he will refrain from working on the subsequent 2 days.

There are four possible choices for his workdays: Day 1,6,10, Day 1,6,11, Day 2,6,10, and Day 2,6,11.

Thus, he is bound to work on Day 6.

Sample Input 2

5 2 3
ooxoo

Sample Output 2

1
5

There is only one possible choice for his workdays: Day 1,5.

Sample Input 3

5 1 0
ooooo

Sample Output 3

There may be no days on which he is bound to work.

Sample Input 4

16 4 3
ooxxoxoxxxoxoxxo

Sample Output 4

11
16

Solution in C++14 (GCC 5.4.1) (judge verdict: Accepted)

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define rep(i, srt, end) for (long long i = (srt); i < (long long)(end); i++)
#define VL vector<ll>
#define VS vector<string>
#define VB vector<bool>
#define VP vector<pair<ll,ll>>
#define VVL vector<vector<ll>>
#define VVP vector<vector<pair<ll,ll>>>
#define PL pair<ll,ll>
#define ALL(v) (v).begin(), (v).end()
ll d1[4] = {1, -1, 0, 0};
ll d2[4] = {0, 0, 1, -1};

int main(){
    ll N, K, C;
    cin >> N >> K >> C;
    string S;
    cin >> S;

    VL dp(N+1, 0), rec(N+1, 0);
    for(ll i = N-1; i >= 0; i--){
        if(S[i] == 'x'){
            rec[i] = rec[i+1];
            continue;
        }
        if(i >= N - C - 1){
            dp[i] = 1;
            rec[i] = max(rec[i+1], dp[i]);
        }else{
            dp[i] = rec[i+C+1] + 1;
            rec[i] = max(rec[i+1], dp[i]);
        }
    }

    if(rec[0] > K){
        return 0;
    }

    ll i = 0, k = K;
    VL ans;
    while(true){
        //cerr << i << endl;
        ll j = i;
        while(true){
            if(dp[j] == k) break;
            j++;
        }
        //cerr << j << endl;
        ll x = j+1;
        bool f = true;
        while(true){
            if(dp[x] == k){
                f = false;
            }
            if(rec[x] == k-1){
                break;
            }
            x++;
        }
        //cerr << x << endl;
        if(f) ans.push_back(j+1);
        i = j + C + 1; 
        k--;
        if(k == 0) break;
    }   

    for(auto as : ans) cout << as << endl;
    //rep(i, 0, N+1) cerr << i << " " << dp[i] << " " << rec[i] << endl;
    return 0;
}