#L2458. 「POI2010」01 序列计数 Ones

「POI2010」01 序列计数 Ones

题目描述

译自 POI 2010 Stage 3. Day 2「Ones」

xx 是一个由 0101 组成的序列。一个 UFO 指的是序列中第一个 11 或者最后一个 11 且不和任何一个 11 相邻。例如 1000101010001010 有两个 UFO,11010110001101011000 没有 UFO,10001000 只有一个 UFO。

11nn 的数的二进制表示中 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

我们需要处理非常大的数字。因此 nn 会用压缩的形式表示。设 xx 是一个正整数,x2x_2 是其二进制表示(最高位为 11),则该数的压缩形式 REP(x)REP(x) 为一个序列,表示连续相同数位的数量。例如:

$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))

输入格式

第一行有一个整数 kk ,表示一个正整数 nn 的压缩形式。 接下来一行有 kk 个整数 x1x_1, x2x_2, ..., xkx_k ,用空格分隔,表示 nn 的压缩形式序列。保证 x1+x2+...+xk1000000000x_1 + x_2 + ... + x_k \le 1000000000,也就是说 0<n<210000000000 < n < 2^{1000000000}

输出格式

输出两行,第一行有一个正整数 ll,第二行有 ll 个正整数 y1y_1, y2y_2, ..., yly_l,用空格分隔,表示 sks(n)sks(n) 的压缩形式。

样例

输入

6
1 1 1 1 1 1

输出

5
1 1 2 1 1

序列 1,1,1,1,1,11,1,1,1,1,11010102=42101010_2 = 42 的压缩形式,sks(42)=45sks(42) = 45,而 45=101101245 = 101101_2 的压缩形式为 1,1,2,1,11,1,2,1,1

数据范围与提示

对于 100%100\% 的数据, 1k10000001 \le k \le 1000000 , 0<xi10000000000 < x_i \le 1000000000

Translated by vincent163