四边形不等式
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

在本题中,我们用区间 表示 个正整数。对于一个 ,我们称一个定义在所有 的子区间(即 的区间 )上的函数 满足四边形不等式,当对于任何的 ,有(即如果两个区间有交且不严格包含,则两个区间的函数值的和大于等于它们的交的函数值加上并的函数值),且对于任意的(即如果两个区间相邻,则它们的函数值的和大于等于它们的并的函数值的和)。
我们可以扩展 的定义域,使其在所有的 的子集上都有定义,且满足四边形不等式。具体地说,一个定义在所有 子集上的函数 满足四边形不等式,当 
给定一个定义在区间上满足四边形不等式的函数,试将其扩展到 的所有子集上。

输入描述:

第一行包含一个正整数 )。
接下来 行,第 行包含 个非负整数,依次表示 。函数值都是 之间的整数。

输出描述:

输出一行  个非负整数,不超过 ,依次表示每个  的子集的函数值,其中子集按照字典序排列。集合  在字典序中排在  前面,当  中最大的元素仅在  中出现。对于所有的  必须与输入保持一致。
示例1

输入

复制
3
3 2 1
3 2
3

输出

复制
0 3 3 2 3 6 2 1