블록
면접 대비시간 제한2초메모리 제한1024 MB
서로 다른 n개의 수가 주어질 때, 앞쪽 k개의 수가 나머지 수보다 모두 작은 분할 위치 k를 찾아 목록으로 출력합니다.
문제
Vova가 어렸을 때 부모님이 그에게 블록 개로 된 세트를 선물했다. 블록마다 자연수가 하나씩 적혀 있으며, 같은 수가 적힌 블록은 없다.
최근 Vova가 블록을 전부 꺼내 한 줄로 늘어놓았다. 여러 정렬 알고리즘을 알고 있던 그는 적힌 수가 왼쪽에서 오른쪽으로 갈수록 커지도록 배열했다.
Vova가 학교에 간 사이 동생 Petya와 여동생 Olya가 그의 방에 들어왔다. Petya는 줄 왼쪽에 있는 블록 몇 개를 가져갔다. Olya는 나머지 블록, 즉 Petya의 블록보다 오른쪽에 있던 블록을 모두 가져갔다. 두 사람 모두 블록을 최소 하나는 가져갔다.
Vova가 돌아오기 전에 Petya와 Olya는 블록을 원래대로 되돌려 놓았다. 블록은 모두 한 줄에 있었고 Petya의 블록이 Olya의 블록보다 왼쪽에 있었다는 점은 기억하고 있었다. 하지만 각자 가지고 논 블록의 순서에는 신경 쓰지 않았으므로, 되돌려 놓은 블록에 적힌 수는 증가하지 않을 수도 있다.
Vova는 집에 돌아와 이상한 낌새를 느꼈다. Olya를 추궁해 블록이 어떻게 뒤섞였는지 알아냈다. 그러던 중 Vova는 Petya가 몇 개의 블록으로 놀았는지 (Olya는 나머지 블록으로 놀았다고 할 때) 알아낼 수 있을지 궁금해졌다. 이 문제를 풀어 달라.
입력
첫째 줄에 블록의 개수 ()이 주어진다.
둘째 줄에는 개의 정수 ()가 주어진다. 이는 Vova가 집에 돌아왔을 때 왼쪽에서 오른쪽으로 놓여 있던 블록에 적힌 수이다. 모든 는 서로 다르다.
출력
첫째 줄에 Petya가 가지고 놀았을 수 있는 블록 묶음의 개수 를 출력한다. 둘째 줄에는 각 묶음에 들어 있는 블록의 개수를 오름차순으로 출력한다.