문제
현대모비스는 이번 전시를 위해서 종류의 컨셉카를 개발했다. 컨셉카의 종류가 많아 대의 컨셉카에 부터 까지 번호를 매겨 주었다. 때문에 모든 컨셉카의 번호는 서로 다르다.
컨셉카를 사람들에게 보여주기 위해 현대모비스 전시장에 번부터 번까지 컨셉카의 번호가 오름차순으로 정렬된 순서로 전시할 생각이다. 하지만, 컨셉카를 옮기는 과정에서 순서가 엉망이 되고 말았다.
전시 담당자인 당신은 다시 부터 까지 순서대로 전시하기 위해 컨셉카의 순서를 바꾸려고 한다. 컨셉카를 하나씩 옮겨도 되지만, 아래의 규칙을 만족하면서 컨셉카의 순서를 바꾸려고 한다.
- 인접한 컨셉카의 번호 차이가 이하인 연속된 구간을 뒤집어야 한다.
- 맨 처음에 주어진 각 컨셉카를 개의 그룹으로 구분한다. 그룹은 항상 컨셉카의 번호가 순서대로 정리되어 있어야 한다.
- 서로 인접한 두 개의 그룹을 번 조건을 만족하면서 컨셉카의 순서를 변경할 수 있다면 하나의 그룹으로 합칠 수 있다.
- 그룹을 합치는 순서는 합칠 수 있는 두 그룹에서 각 그룹의 가장 작은 수, 가장 작은 수가 포함되어 있지 않은 다른 그룹에서 가장 작은 수와 같이 하나의 쌍으로 표현할 때 값이 작은 것부터 그룹으로 합치기 시작한다. 이때, 값이 가장 작다는 것은 쌍 중 가장 작은 가 있는 쌍을 의미하고 만약 가장 작은 가 두 개 이상이라면 해당 쌍 중 값이 가장 작은 것을 의미한다.
- 이미 합쳐진 그룹은 두 개의 그룹으로 나눌 수 없다.
예를 들어, 처럼 컨셉카가 전시되어 있다고 가정한다. 이때, 는 인접한 수의 차이가 모두 이하이므로 으로 뒤집을 수 있다.
하지만, 는 과 의 차이가 보다 크기 때문에 으로 뒤집을 수 없다. 아래 그림은 뒤집을 수 있는 구간들을 표시한 것이다.
컨셉카를 오름차순으로 정렬하는 과정에서 크기가 인 그룹에 속한 번 컨셉카가 몇 번째에 다른 그룹으로 합쳐지는지 알아내고자 한다.
예를 들어, 위와 같이 처럼 컨셉카가 전시되어 있다고 가정한다면, 그룹을 소괄호 를 이용하여 구분하면 아래와 같다.
맨 처음에 합쳐지는 두 그룹은 으로 그룹을 합치면 와 같다. 번 컨셉카와 번 컨셉카는 첫 번째에 다른 그룹과 합쳐지는 것을 알 수 있다.
그 다음으로 합쳐지는 그룹은 이므로 그룹을 합치고 나면 와 같다. 번 컨셉카가 두 번째에 다른 그룹과 합쳐지는 것을 알 수 있다.
위에서 설명된 규칙을 만족하면서, 컨셉카의 순서를 바꿀 때 부터 까지 컨셉카를 순서대로 전시할 수 있을지 구하시오. 만약 컨셉카를 순서대로 전시할 수 있을 때, 크기가 인 그룹에 속한 번째의 컨셉카는 몇 번째에 다른 그룹과 합쳐지는 구하시오.
입력
첫째 줄에 컨셉카의 개수를 의미하는 정수 이 주어진다.
둘째 줄에 각 컨셉카의 번호를 의미하는 정수 개가 공백으로 구분되어 주어진다. 각 정수는 이상 이하이며 서로 다른 값이다.
출력
지문에서 설명된 규칙을 만족하면서 컨셉카의 번호 순서를 작은 숫자에서 큰 숫자로 오름차순으로 바꿔서 전시할 수 있다면, 첫째 줄에 "Yes"를 출력하시오. 둘째 줄에는 크기가 인 그룹에 속한 번의 컨셉카가 몇 번째에 다른 그룹과 합쳐지는지 공백으로 구분하여 출력하시오.
만약 컨셉카의 번호 순서를 작은 숫자에서 큰 숫자로 오름차순으로 전시할 수 없다면 첫째 줄에만 "No" 를 출력하시오.
* 문제에 대한 힌트는 블로그에서 확인할 수 있습니다.
* 문제에 대한 질문은 Q&A에 남겨주세요!