#745
Gold III
COW 문자열 나누기
원문: English
시간 제한
2s
메모리 제한
1024MB
제출
0
정답
0
맞힌 사람
0
정답 비율
0.0%

문제

지안이는 양의 정수 NN과 길이가 3N3N인 문자열 SS를 가지고 있다. SSCOW, OWC, WCO 중 하나인 길이 33의 문자열 NN개를 이어 붙여 만든 것이다. 즉, SS를 구성하는 각 단위는 COW를 순환 이동(cyclic shift)하여 만들 수 있는 문자열이다.

문자열 XX제곱 문자열인 것은 X=Y+YX = Y + Y를 만족하는 문자열 YY가 존재한다는 것과 같다. 여기서 ++는 문자열 이어 붙이기를 의미한다. 예를 들어, COWCOWCC는 제곱 문자열이지만, COWOOC는 아니다.

지안이는 한 번의 연산으로 SS에서 제곱 문자열인 부분 수열 TT를 하나 골라 제거할 수 있다. 문자열의 부분 수열이란, 기존 문자열에서 00개 이상의 문자를 제거하여 얻을 수 있는 문자열을 말한다.

지안이를 도와 SS를 빈 문자열로 만드는 것이 가능한지 판단하고, 가능하다면 그 방법을 구하시오.

또한, 00 또는 11의 값을 갖는 매개변수 kk가 주어진다. 사용한 연산 횟수를 MM이라고 하자.

  • k=0k = 0이라면, MM은 가능한 최소 연산 횟수와 같아야 한다.
  • k=1k = 1이라면, MM은 가능한 최소 연산 횟수보다 최대 11만큼 더 클 수 있다. (MM \le 최소 연산 횟수 +1+ 1)

입력

첫째 줄에 테스트 케이스의 개수 TT와 매개변수 kk가 공백으로 구분되어 주어진다. (1T1041 \le T \le 10^4; 0k10 \le k \le 1)

각 테스트 케이스는 다음과 같이 두 줄로 구성된다.

  • 첫째 줄에 NN이 주어진다. (1N1051 \le N \le 10^5)
  • 둘째 줄에 문자열 SS가 주어진다.

모든 테스트 케이스에 대한 NN의 합은 10510^5를 넘지 않는다.

출력

각 테스트 케이스에 대해, 다음과 같이 한 줄 또는 두 줄을 출력한다.

SS를 빈 문자열로 만드는 것이 불가능하다면, -1을 출력한다.

가능하다면, 첫째 줄에 사용한 연산 횟수 MM을 출력한다. 둘째 줄에 3N3N개의 정수를 공백으로 구분하여 출력한다. ii번째 정수 xxSSii번째 문자가 xx번째 연산에서 제거되었음을 의미한다. (1xM1 \le x \le M)

예제 입력 1

3 1
3
COWOWCWCO
4
WCOCOWWCOCOW
6
COWCOWOWCOWCOWCOWC

예제 출력 1

-1
1
1 1 1 1 1 1 1 1 1 1 1 1
3
3 3 2 3 3 2 1 1 1 1 1 1 1 1 1 1 1 1

예제 입력 2

3 0
3
COWOWCWCO
4
WCOCOWWCOCOW
6
COWCOWOWCOWCOWCOWC

예제 출력 2

-1
1
1 1 1 1 1 1 1 1 1 1 1 1
2
1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2

점수

  • 입력 3-4: T10T \le 10, N6N \le 6, k=0k = 0
  • 입력 5-6: k=1k = 1
  • 입력 7-14: k=0k = 0
코드 제출

코드를 제출하려면 로그인이 필요합니다.

로그인
내 제출
제출 내역이 없습니다.
맞은 사람
아직 맞은 사람이 없습니다.
난이도 투표
Gold III1명 투표· 약 1개월 전
로그인 후 AC 받으면 투표할 수 있습니다.
전체 제출
제출 내역이 없습니다.