호떡 뒤집기

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

요약
처음에 모두 흰색인 호떡 N개를 최대 N번의 앞부분 또는 뒷부분 뒤집기로 목표하는 흑백 배열로 만들 수 있는지 판정하고, 가능하면 그 방법을 출력한다.
난이도

어려움10점 중 8점

유형
그리디, 구현, 수학, 완전 탐색
정답자
아직 제출이 없습니다

문제

프라이팬 위에는 NN개의 호떡이 일렬로 놓여 있다. 각각의 호떡은 앞면이 흰색, 뒷면이 갈색이다. 처음에 모든 호떡은 앞면이 보이는 상태이다. 이때, 호떡 요리사인 현준이는 다음 절차에 따른 작업을 최대 NN번 수행할 수 있다.

  1. xx번째와 (x+1)(x+1)번째 호떡에 보이는 색이 같도록 정수 xx를 고른다. (1≤x≤N−1)(1 \le x \le N-1)
  2. xx번째 호떡에 보이는 색이 흰색이라면 11번째부터 xx번째까지의 호떡을 모두 뒤집는다. 반대로 xx번째 호떡에 보이는 색이 갈색이라면 (x+1)(x+1)번째부터 NN번째까지의 호떡을 모두 뒤집는다.

현준이는 작업을 수행해 자신이 원하는 색깔의 호떡 배열을 만들고 싶다. 현준이가 원하는 배열을 얻을 수 있는지 판단하고, 얻을 수 있다면 그 방법 중 하나를 아무거나 찾아서 현준이에게 알려주자.

입력

첫 번째 줄에 호떡의 개수 NN이 주어진다. (1≤N≤500,000)(1 \le N \le 500\\, 000)

두 번째 줄에 현준이가 원하는 색깔의 배열을 나타내는 길이 NN의 문자열 SS가 주어진다. S_iS\_i가 W라면 ii번째 호떡을 앞면이 보이게, B라면 ii번째 호떡을 뒷면이 보이게 만들어야 한다.

출력

현준이가 원하는 색깔의 배열을 만들 수 있다면, 첫 번째 줄에 작업 횟수 KK를 출력한다. (0≤K≤N)(0 \le K \le N)

그다음 줄부터 KK줄에 걸쳐 작업에 대한 정보를 출력한다. 그 중 ii번째 줄에는 ii번째 작업에서 선택한 xx의 값을 출력한다. (1≤x≤N−1)(1 \le x \le N-1)

가능한 작업 순서가 여러 개라면 그중 아무거나 출력한다. 또한, KK의 값을 최소화하지 않아도 됨에 유의하라.

현준이가 원하는 색깔의 배열을 만들 수 없다면, 첫 번째 줄에 -1을 출력한다.

예제2

  1. 예제 1

    입력
    4
    WBBW
    
    예상 출력
    2
    1
    3
    
  2. 예제 2

    입력
    1
    B
    
    예상 출력
    -1