에띠가 기획하고 있는 새로운 게임에는 몬스터 농장이라는 시스템이 있다. 이 시스템에서 몬스터들은 여러 마리 있을 수 있으며, 좌우 방향 일렬로 배치되어 있다.
이 게임의 유저는 다음의 두 스킬 중 하나로 몬스터 농장에 있는 몬스터의 구성을 바꿀 수 있다.
- 연속 공격 (
-): 연속된 구간에 있는 몬스터를 고른다. 구간에는 몬스터가 마리 이상 있어야 하며, 몬스터의 레벨은 구간에서 증가해야 한다. 해당 몬스터를 전부 없앤다. - 연속 소환 (
+): 각 몬스터의 레벨이 이상 이하인 정수이고, 레벨이 증가하도록 연속된 구간에 추가한다. 소환하는 몬스터는 마리 이상이어야 한다.
단, 몬스터의 레벨이 증가한다는 의미는, 오른쪽에 있는 몬스터의 레벨이 왼쪽에 있는 몬스터의 레벨보다 크다는 의미이다. 몬스터를 한 마리만 선택한 경우도 몬스터의 레벨이 증가한다고 생각한다.
예를 들어, 이고 이며, 현재 몬스터의 레벨이 왼쪽부터 라고 하자. 여기서 연속 소환을 사용해서, 번째 몬스터 뒤에 레벨이 각 인 몬스터를 연속 소환하면 농장에 있는 몬스터의 레벨 구성은 왼쪽부터 가 된다. 여기서 연속 공격을 사용하여 번째부터 번째까지의 몬스터를 제거하면 농장에 있는 몬스터의 레벨 구성은 왼쪽부터 가 된다.
현재 몬스터 농장에는 몬스터가 마리가 있으며, 왼쪽에서 번째 몬스터의 레벨은 이다. 에띠는 몬스터 농장의 구성을 몬스터가 마리가 되고, 왼쪽에서 번째 몬스터의 레벨이 가 되도록 하고 싶다.
에띠가 연속 공격과 연속 소환을 원하는 순서로 원하는 만큼 사용하여 몬스터의 구성을 원하는 대로 만들 수 있는지와, 바꿀 수 있다면 스킬을 사용하는 방법을 구하여라.
입력 형식
첫 줄에 몬스터의 레벨 제한을 나타내는 정수 와 스킬의 제한을 나타내는 정수 이 공백으로 구분되어 주어진다.
두 번째 줄에 현재 몬스터 농장을 구성하는 몬스터 수를 나타내는 정수 가 주어진다.
세 번째 줄에 현재 몬스터 농장 구성의 몬스터의 레벨을 나타내는 정수 개가 공백으로 구분되어 주어진다. 왼쪽에서부터 차례로 를 의미한다.
네 번째 줄에 만들고 싶은 몬스터 농장 구성의 몬스터 수를 나타내는 정수 가 주어진다.
다섯 번째 줄에 만들고 싶은 몬스터 농장 구성의 몬스터의 레벨을 나타내는 정수 개가 공백으로 구분되어 주어진다. 왼쪽에서부터 차례로 를 의미한다.
출력 형식
첫 줄에 몬스터 농장의 몬스터 구성을 원하는 대로 만들 수 있다면 YES를, 아니면 NO를 출력하라.
몬스터 농장의 구성을 원하는 대로 바꿀 수 있다면, 두 번째 줄에 사용해야 하는 스킬의 개수 를 출력한다.
그다음 줄부터 사용하는 스킬 개를 다음과 같은 방법으로 차례로 출력하여라.
- 연속 공격: 연산을 한 줄에 출력한다.
- 한 줄에
-, 스킬을 사용할 위치 , 없앨 몬스터 수 을 공백으로 구분하여 출력한다. - 해당 연산은 왼쪽에서부터 번째 몬스터를 없앤다는 의미이다.
- 한 줄에
- 연속 소환: 연산을 두 줄에 걸쳐 출력한다.
- 첫 줄에
+, 스킬을 사용할 위치 , 추가할 몬스터 수 을 공백으로 구분하여 출력한다. - 두 번째 줄에는 추가할 몬스터의 레벨을 왼쪽에서부터 차례로, 공백으로 구분하여 출력한다.
- 해당 연산은 왼쪽에서 번째 몬스터 뒤에 (이라면 가장 앞에) 마리의 몬스터를 차례로 추가한다는 의미이다.
- 첫 줄에
만약 답이 여러 가지라면, 그중 아무거나 하나 출력한다. 또한, 연산의 횟수를 최소화할 필요가 없음을 유의하여라.
몬스터 농장의 구성을 에띠가 원하는 대로 만들 수 있다면, 스킬을 번 이내로 사용하는 답이 존재함을 증명할 수 있다.
예제
입력
10 3 6 3 1 4 1 5 9 7 3 2 7 8 9 1 4
출력
YES 2 + 1 4 2 7 8 9 - 7 3
채점 방식
입력 케이스들은 다음과 같은 종류로 구별되며, 한 종류의 케이스를 다 맞추어야 그 종류에 배정된 점수를 받을 수 있다.
종류 1: 15점
종류 2: 13점
종류 3: 9점
종류 4: 26점
종류 5: 37점
추가적인 제한 조건이 없음.
해설
삽입과 삭제가 서로 반대 연산임에 주목한다. 인 경우에는 추가적인 연산이 불가능 하므로, 두 수열이 같은지 판단한다. 인 경우에는 부터 까지를 차례로 쓴 수열만 삽입 가능하므로, 해당 연속 수열을 삭제한 수열이 같은 수열인지 판단한다. 인 경우에는 항상 가능한데, 부터 까지의 수열을 쓰는 방법은, 부터 까지의 수열을 쓰고, 이후에 부터 까지의 수열을 삽입 한 후, 뒤의 수열을 삭제한다. 위 방법으로 임의의 수를 추가 삭제할 수 있다. 출력제한에 유의하여 구현해야 한다.