빼내기
시간 제한1초메모리 제한128 MB
흰 블록은 'b', 검은 블록은 'c'다. 블록 열을 스택으로 왼쪽부터 훑으며, 맨 위 k+1개가 흰 블록 k개와 검은 블록 1개를 이루면 꺼내 기록하고, 기록한 묶음을 역순으로 출력한다.
문제
어린 에드나가 선물로 빼내기 게임을 받았다. 빼내기는 혼자서 하는 게임이다. 한 줄로 나란히 놓인 블록 개가 주어지며, 각 블록에는 왼쪽부터 오른쪽으로 번부터 번까지 번호가 매겨져 있다. 블록은 흰색이거나 검은색이고, 흰색 블록의 개수는 검은색 블록 개수의 정확히 배이다.
목표는 허용되는 조작만으로 모든 블록을 빼내는 것이다.
한 번의 조작은 흰색 블록 개와 검은색 블록 개를 함께 빼내며, 이때 나머지 블록의 위치는 바꾸지 않는다. 앞선 조작으로 블록이 빠져나가 생긴 빈자리를 틈이라고 하자. 어떤 조작이 허용되려면, 그 조작으로 빼내는 개의 블록을 왼쪽에서 오른쪽 순서로 늘어놓았을 때 이웃한 두 블록 사이에 틈이 없어야 한다. 빼내는 블록들 사이에 아직 남아 있는 블록이 끼어 있어도 괜찮으며, 앞선 조작으로 생긴 틈만 없으면 된다.
모든 입력은 끝까지 빼낼 수 있으므로, 그러한 조작의 순서는 항상 존재한다.
입력
첫째 줄에 두 정수 과 가 공백 하나로 구분되어 주어진다 (, ). 은 블록의 총개수이고, 는 한 번의 조작에서 검은색 블록 하나와 함께 빼내는 흰색 블록의 개수이다. 모든 입력에서 은 을 나눈다.
둘째 줄에 길이 인 문자열이 주어진다. 각 문자는 흰색 블록을 뜻하는 b 또는 검은색 블록을 뜻하는 c이며, 왼쪽부터 오른쪽까지 블록의 색을 나타낸다.
출력
개의 줄을 출력한다. 각 줄은 한 번의 조작에 해당하며, 그 조작에서 빼내는 개의 블록 번호를 오름차순으로 공백 하나씩 구분하여 적는다.
유효한 순서는 여러 가지일 수 있으므로, 항상 유효한 답을 만들어 내는 다음의 표준 절차로 얻는 순서를 출력한다.
- 블록을 왼쪽에서 오른쪽으로 훑으면서 하나씩 스택에 넣는다.
- 블록을 하나 넣을 때마다, 스택의 맨 위 개 블록에 검은색 블록이 정확히 하나(따라서 흰색 블록이 개) 있는 동안 그 개를 한 묶음으로 스택에서 꺼내고, 이 묶음을 답 목록의 맨 앞에 놓는다. 다음 블록을 넣기 전에 새로 드러난 맨 위를 다시 확인한다.
- 마지막 블록을 넣고 나면 스택이 비고, 정확히 개의 묶음이 만들어진다.
이렇게 얻은 순서대로 묶음을 출력하므로, 가장 나중에 만들어진 묶음이 가장 먼저 출력된다. 각 줄 안의 번호는 오름차순이다.
노트
틈은 블록을 빼내어 생긴 빈자리를 뜻한다. 첫 번째 예제 입력에서 그 조작들을 차례로 수행하면 블록의 배열이 아래 그림처럼 단계별로 바뀐다.
