수열 지우기
시간 제한2초메모리 제한1024 MB
수열 A를 연속된 구간으로 나누어 각 구간 mex 값의 나열이 사전순으로 가장 크도록 만들고, 그 결과 수열 B를 출력합니다.
문제
누구나 집합의 가장 작은 값과 가장 큰 값을 돌려주는 함수 과 를 안다. 이제 수의 집합에 적용하면 집합에 속하지 않는 가장 작은 음이 아닌 정수를 돌려주는 함수 를 살펴보자. 이름은 minimal excluded에서 왔다. 예를 들어 이고 이다. Magnus는 mex의 정의를 알게 된 뒤 바로 이를 바탕으로 한 게임을 만들었다. 플레이어는 N개의 음이 아닌 정수로 이루어진 수열 A를 받고, A에 원소가 남아 있는 동안 다음 과정을 반복해서 수열 B를 만든다. (1) A의 길이를 넘지 않는 양의 정수 k를 고른다. (2) A의 처음 k개 원소의 mex를 B의 끝에 추가한다. (3) A에서 처음 k개 원소를 삭제한다. 플레이어의 과제는 매 단계마다 k를 골라, 가능한 모든 선택 중에서 결과로 얻는 수열 B가 사전순으로 가장 크도록 하는 것이다. 수열 이 수열 보다 사전순으로 크다는 것은, 이고 이며 , , , 이고 인 가 존재하거나, 이고 , , , 인 경우를 말한다.
입력
첫 줄에 수열 의 길이 ()이 주어진다. 둘째 줄에는 개의 원소 ()가 공백으로 구분되어 주어진다.
출력
첫 줄에 찾은 수열 의 길이 을 출력한다. 둘째 줄에는 을 공백으로 구분하여 출력한다.