시간선 통합

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

요약
인접한 두 시간선을 최솟값 또는 최댓값으로 합치되 각 연산 횟수 제한을 지키면서, 주어진 시각 t로 모든 시간선을 하나로 합치는 순서를 구성해 출력한다.
난이도

어려움10점 중 8점

유형
그리디, 구현, 배열, 시뮬레이션
정답자
아직 제출이 없습니다

문제

"과거를 지배하는 자가 미래를 지배한다."

- 조지 오웰, '1984'

전 우주의 지성체로 구성된 UCPC (Universe Consistency Preservation Committee, 우주 균일성 유지 위원회)는 우주가 NN개의 시간선으로 분기되어 있음을 발견했다. ii번째 시간선은 11 이상 NN 이하의 정수 시각 a_ia\_i를 가지며 각 시간선의 시각은 모두 다르다. 아직 각 시간선은 안정된 상태지만 언제든지 불안정해질 수 있으며, 불안정한 시간선은 전 우주에 인간의 인지 능력을 벗어난 악영향을 끼칠 수 있다. 최악의 경우 우주의 절멸까지 우려해야 하는 중대한 사태임에 따라, UCPC는 NN개의 시간선을 현재 시각 tt에 맞춰 하나로 통합해야 한다는 결론에 도달했다.

시간선 통합은 인접한 두 시간선을 시각의 최댓값 또는 최솟값을 가지는 하나의 시간선으로 합치는 과정이다. 1≤i<N1 \leq i < N일 때 ii번째 시간선과 i+1i+1번째 시간선은 인접해 있다. 시간선 통합은 우주적 규모의 비가역적 현상이기 때문에 극도로 신중히 결정되어야 하며, 두 시각의 최댓값을 선택하는 통합과 최솟값을 선택하는 통합의 수행 횟수에도 제약이 있다. 주어진 제약사항 속에서도 UCPC가 성공적으로 모든 시간선을 하나로 통합할 수 있을지 판단해보자.

입력

첫째 줄에 테스트 케이스의 개수 TT가 주어진다. (1≤T≤100,0001 \leq T \leq 100\\,000)

각 테스트 케이스의 첫째 줄에는 시간선의 개수를 의미하는 정수 NN, 현재 시각을 의미하는 정수 tt, 가능한 최솟값 통합의 횟수를 의미하는 정수 aa, 가능한 최댓값 통합의 횟수를 의미하는 정수 bb가 공백으로 구분되어 주어진다. (2≤N≤500,0002 \leq N \leq 500\\,000; 1≤t≤N1 \leq t \leq N; 0≤a,b<N0 \leq a, b < N; a+b≥N−1a + b \geq N-1)

각 테스트 케이스의 둘째 줄에는 NN개의 정수 A_1,A_2,⋯ ,A_NA\_1, A\_2, \cdots, A\_N이 공백으로 구분되어 주어진다. A_iA\_i는 ii번째 시간선의 시각을 의미한다. 각 A_iA\_i는 11 이상 NN 이하의 정수이며 서로 다르다.

모든 테스트 케이스에 대해 NN의 합은 500,000500\\,000 이하이다.

출력

각 테스트 케이스에 대한 답을 순서대로 출력한다.

조건에 맞는 시간선 통합이 불가능하면, 첫째 줄에 no를 출력한다.

가능하다면, 첫째 줄에는 yes를 출력하고, 둘째 줄에는 m과 M으로만 구성된 길이 N−1N-1의 문자열 SS를 출력하며, 셋째 줄에는 N−1N-1 개의 정수 b_ib\_i를 공백으로 구분해 출력한다.

S_iS\_i가 m이면 ii번째 통합은 최솟값 통합이며, M이면 최댓값 통합이다. b_ib\_i는 ii번째 통합에 b_ib\_i번째 시간선과 b_i+1b\_i + 1번째 시간선을 통합했음을 의미한다. 조건에 부합하는 시간선 통합 방법이 여러 가지 있으면 그중 아무 것이나 출력한다.

ii번째 시간선 통합을 할 때는 시간선이 총 N−i+1N-i+1개 남아 있으므로, 1≤b_i≤N−i1 \leq b\_i \leq N-i를 충족해야 함에 유의한다.

예제1

  1. 예제 1

    입력
    2
    4 2 2 3
    1 4 2 3
    3 3 2 0
    3 1 2
    
    예상 출력
    yes
    mMm
    2 1 1
    no