외톨이 1

아직 제출이 없습니다시간 제한3초메모리 제한512 MB

문제

xx0011로 이루어진 수열이라고 하자. 수열 xx에서 외톨이 1(UFO)이란, 수열에 등장하는 11 가운데 양 끝(가장 앞 또는 가장 뒤)에 있으면서 다른 어떤 11과도 인접하지 않는 11을 말한다. 예를 들어 수열 1000101010001010에는 UFO가 두 개, 수열 11010110001101011000에는 UFO가 없으며, 수열 10001000에는 UFO가 정확히 한 개 있다.

11부터 nn까지의 모든 수를 이진법으로 나타냈을 때 등장하는 UFO의 총 개수를 sks(n)sks(n)이라고 하자. 예를 들어 sks(5)=5sks(5)=5, sks(64)=59sks(64)=59, sks(128)=122sks(128)=122, sks(256)=249sks(256)=249이다.

매우 큰 수를 다루므로 수를 간결하게 표현한다. 양의 정수 xx의 이진 표현 (x)2(x)_2는 항상 11로 시작한다. 이때 xx간결 표현 REP(x)REP(x)는 같은 숫자가 연속으로 이어지는 각 구간의 길이를 순서대로 나열한 양의 정수 수열이다. 예를 들면 다음과 같다.

REP(460288)=REP(11100000110000000002)=(3,5,2,9)REP(460288) = REP(1110000011000000000_2) = (3, 5, 2, 9)

REP(408)=REP(1100110002)=(2,2,2,3)REP(408) = REP(110011000_2) = (2, 2, 2, 3)

REP(n)REP(n)이 주어질 때 REP(sks(n))REP(sks(n))을 구하는 프로그램을 작성하라.

입력

첫째 줄에 양의 정수 nn의 간결 표현의 길이를 나타내는 정수 kk (1k1061 \le k \le 10^6)가 주어진다. 둘째 줄에는 kk개의 정수 x1,x2,,xkx_1, x_2, \ldots, x_k (0<xi1090 < x_i \le 10^9)가 공백 하나로 구분되어 주어지며, 이 수열이 nn의 간결 표현이다. x1+x2++xk109x_1 + x_2 + \cdots + x_k \le 10^9, 즉 0<n<21090 < n < 2^{10^9}임이 보장된다.

출력

두 줄을 출력한다. 첫째 줄에는 하나의 양의 정수 ll을 출력한다. 둘째 줄에는 ll개의 양의 정수 y1,y2,,yly_1, y_2, \ldots, y_l을 공백 하나로 구분하여 출력하며, 이 수열은 sks(n)sks(n)의 간결 표현을 이룬다.