立体光刻(SLA)是一种通过激光逐层固化液体材料来制造固体物体的 3D 打印技术。在本题中,我们考虑 SLA 的一种二维简化模型,其中待打印物体的设计可以用一个由 ‘#’ 和 ‘.’ 字符组成的矩形网格来表示,其中 ‘#’ 代表物体占据的网格单元,‘.’ 代表空空间。例如,下面是一个 $4 \times 8$ 的设计:
..#..... ..#..#..
.#.##..
.#####.
设计不一定由单个连通块组成,但除了底层的 ‘#’ 单元外,每个 ‘#’ 单元都必须由其正下方的另一个 ‘#’ 单元支撑。
使用 SLA 打印物体时,从底层开始逐层进行。首先,该行的所有单元格都会被液态光敏树脂淹没。然后,激光扫过该行,将所有 ‘#’ 单元格中的树脂固化为固体,并跳过所有 ‘.’ 单元格。接着,最左侧 ‘#’ 左侧和最右侧 ‘#’ 右侧的剩余液体会流走。其他液体则会被困住。(如果该行中没有 ‘#’ 单元格——这种情况只会发生在设计顶部附近的行,即物体已完全打印完毕之后——则该行的所有液体都会流走。)此过程对后续每一行重复进行。对于上述设计,打印完成后,树脂残留在所有标记为 ‘~’ 的单元格中:
..#..... ..#~~#..
~#~##..
~#####.
在手动清理物体上残留的树脂时,你开始思考:仅凭打印后每一行残留的液态树脂量,能恢复多少原始设计?对于上述设计,每一行(从设计顶部开始)残留的树脂量分别为 0, 2, 2, 1。其他设计也可能具有相同的残留树脂特征;例如:
....
..
..
.
给定每一行(从顶行开始)残留的液态树脂单元格数量列表,请打印出满足这些残留树脂量的最窄物体设计的宽度。如果不存在这样的设计,则打印 impossible。
输入格式
第一行包含一个整数 $N$ ($1 \le N \le 10^5$),表示物体设计的行数。接下来 $N$ 行,每行包含一个整数 $x$ ($0 \le x \le 10^9$),表示目标物体设计中每一行(从上到下)残留的液态树脂单元格数量。
至少有一行包含至少一个残留的液态树脂单元格。
输出格式
打印出残留液态树脂单元格数量与输入匹配的最窄物体设计的宽度(列数)。(“最窄”指列数尽可能小)。如果不存在这样的设计,则打印 impossible。
样例
样例输入 1
4 0 2 2 1
样例输出 1
4
样例输入 2
3 4 0 4
样例输出 2
11
说明
样例输入 1 对应于上述示例。样例输入 2 的一种最窄可能设计为:
#....#..... ######..... ######....#