만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

여우 셰프

시간 제한1초메모리 제한1024 MB

요약
O와 X로 이루어진 쿠키 열에서 길이가 K 이상인 구간을 뒤집어 모든 쿠키의 앞뒷면을 같게 만드는 최소 횟수와 각 구간을 구합니다.
난이도

보통10점 중 6점

유형
동적 계획법, 누적 합, 그리디
정답자
아직 제출이 없습니다

문제

여우 마을에 사는 여우들에게도 내 집 마련은 중요한 문제이다. 얼마 전 독립에 성공한 아기 여우를 축하하려고 친구들이 아기 여우의 집에 모이기로 했다.

아기 여우는 일일 셰프가 되어 고마운 친구들에게 음식을 대접하기로 했다.

아기 여우는 애피타이저로 여우 그림이 그려진 쿠키 NN개를 긴 접시에 일렬로 담아 내려고 한다. 그런데 접시를 식탁에 내려놓는 과정에서 쿠키 몇 개가 뒤집히고 말았다. 이대로 손님을 맞으면 아기 여우가 음식을 대충 준비했다고 여겨질지도 모른다!

아기 여우는 집게로 쿠키를 다시 뒤집으려고 한다. 연속한 쿠키들은 한 번에 뒤집을 수 있으며, 쿠키가 집게에 비해 작아서 한 번 뒤집을 때 최소 KK개의 연속한 쿠키를 함께 뒤집어야 한다. 손님들에게 정돈된 인상을 주는 것이 목적이므로, 쿠키가 모두 같은 면을 향하기만 하면 앞면이든 뒷면이든 상관없다.

손님이 올 시간이 얼마 남지 않았다. 하지만 아기 여우에게는 쿠키 말고도 준비할 요리가 많다. 집게를 사용해 쿠키를 모두 같은 면으로 만들 수 있는지 확인하고, 가능하다면 집게를 최소한으로 사용하는 방법을 구하라.

입력

첫째 줄에 양의 정수 NN과 KK가 공백을 사이에 두고 주어진다. (1≤K≤N≤500 0001\le K\le N\le 500\,000)

둘째 줄에 길이가 NN이고 O, X만으로 이루어진 문자열이 주어진다. ii번째 문자가 O이면 ii번째 쿠키는 앞면, X이면 뒷면으로 놓여 있다.

출력

집게를 어떻게 사용하더라도 모든 쿠키를 같은 면으로 놓을 수 없으면 첫째 줄에 -1을 출력한다.

같은 면으로 만들 수 있다면 첫째 줄에 집게의 최소 사용 횟수 MM (M≥0M\ge 0)을 출력한다. 이어서 MM개의 줄에 집게 사용 방법을 한 줄에 하나씩 차례대로 출력한다. ii번째 쿠키부터 jj번째 쿠키까지 뒤집는다면 ii와 jj를 공백을 사이에 두고 출력한다. (1≤i≤j≤N1\le i\le j\le N; j−i≥K−1j-i\ge K-1)

힌트

집게로 쿠키의 위치를 바꿀 수는 없다. 제자리에서 앞면과 뒷면의 상태만 바꿀 수 있다.

예제3

  1. 예제 1

    입력
    10 3
    OXXXOXOXOO
    
    예상 출력
    3
    2 6
    5 7
    6 8
    
  2. 예제 2

    입력
    9 6
    XXXXXOOOO
    
    예상 출력
    -1
    
  3. 예제 3

    입력
    7 7
    XXXXXXX
    
    예상 출력
    0