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 Ruby (2.3.3) (judge verdict: Runtime Error)

require 'set'

n, k, c = gets.split.map(&:to_i)
s = gets.chomp

class Calc
  def initialize(total, work, gap, schedule)
    @total = total
    @work = work
    @gap = gap
    @schedule = ' ' + schedule  # 1..nでアクセスできるようにする
    @cache = Hash.new
  end

  def get_workdays
    get_workdays_impl(1, @work)
  end

  private

  def get_workdays_impl(firstday, restwork)
    workdays = []

    cache = @cache["#{firstday}+#{restwork}"]
    unless cache.nil?
      cache.each do |workday|
        workdays.push workday.clone
      end
      return workdays
    end

    if restwork == 1
      (firstday..@total).each do |t|
        if @schedule[t] == 'o'
          workdays.push [t]
        end
      end
    else
      # W gap W gap ... gap W
      # -> 最初に働くのはfirstday〜(total - (1 + gap) * (work - 1))のどこか
      last = @total - (1 + @gap) * (restwork - 1)
      if firstday <= last
        (firstday..last).each do |t|
          if @schedule[t] == 'x'
            next
          end
          restworkdays = get_workdays_impl(t + @gap + 1, restwork - 1)
          unless restworkdays.empty?
            restworkdays.each do |workday|
              workday.unshift t
              workdays.push workday
            end
          end
        end
      end
    end

    @cache["#{firstday}+#{restwork}"] = workdays
    workdays
  end
end

calc = Calc.new(n, k, c, s)
workdays = calc.get_workdays

workdayset = workdays.map{|workday| Set.new(workday)}
common = workdayset.inject{|result, item| result & item}
common.to_a.sort.each do |day|
  puts day
end