KHU와 DKU
시간 제한1초메모리 제한1024 MB
길이 2N인 중복집합에서 D, H, K, U의 개수가 주어질 때, 앞 절반 B1의 "KHU" 부분 수열 최댓값과 뒤 절반 B2의 "DKU" 부분 수열 최댓값이 같아지도록 문자를 배치한 문자열 B를 찾는다.
문제
개의 문자들로 이루어진 중복집합 가 있다. 의 모든 문자는 'D', 'H', 'K', 'U'중 하나이다.
의 모든 문자들을 임의의 순서로 나열하여 만든 문자열을 라 하고, 의 번째부터 번째 문자까지 추출한 부분 문자열을 , 번째부터 번째 문자까지 추출한 부분 문자열을 라 하자.
문자열 에 대하여 함수 와 를 다음과 같이 정의한다.
- : 에서 부분 수열로 등장하는 "
KHU"의 개수 - : 에서 부분 수열로 등장하는 "
DKU"의 개수
쿠옹이와 단웅이는 의 부분 문자열 과 에 대하여 다음과 같은 작업을 진행한다.
쿠옹이는 의 문자들의 순서를 적절히 바꾸어 새로운 문자열 을 만든다. 쿠옹이는 의 값이 최대가 되는 순서를 선택한다.
단웅이는 의 문자들의 순서를 적절히 바꾸어 새로운 문자열 를 만든다. 단웅이는 의 값이 최대가 되는 순서를 선택한다.
쿠옹이와 단웅이의 작업이 끝났을 때 를 만족시키는 문자열 를 아무거나 하나 찾아보자.
입력
첫째 줄에 테스트 케이스의 수 가 주어진다. ()
각 테스트 케이스의 첫째 줄에 이 주어진다. ()
각 테스트 케이스의 둘째 줄에 음이 아닌 정수 , , , 가 공백으로 구분되어 주어진다. , , , 는 각각 에 들어있는 문자 'D', 'H', 'K', 'U'의 개수를 의미한다. ()
모든 테스트 케이스에 대한 의 합은 을 넘지 않는다.
출력
각 테스트 케이스마다 를 만족시키는 문자열 가 존재한다면 첫째 줄에 "YES"를 출력하고, 둘째 줄에 를 출력한다. 가능한 답이 여러 가지라면 아무거나 출력한다.
만약 가능한 문자열 가 존재하지 않는다면 첫째 줄에 "NO"를 대신 출력한다.
힌트
문자열의 부분 수열이란 주어진 문자열에서 원래 순서를 유지하며 개 이상의 문자를 제거하여 얻을 수 있는 문자열이다.
예를 들어, 문자열 "KHUDKU"에는 다음과 같이 부분 수열로 "KHU"가 번, "DKU"가 번 등장한다.
- "
KHUDKU" - "
KHUDKU" - "
KHUDKU"