#ABC150E. Change a Little Bit

Change a Little Bit

题目描述

For two sequences SS and TT of length NN consisting of 00 and 11, let us define f(S,T)f(S, T) as follows:

  • Consider repeating the following operation on SS so that SS will be equal to TT. f(S,T)f(S, T) is the minimum possible total cost of those operations.

    • Change SiS_i (from 00 to 11 or vice versa). The cost of this operation is D×CiD \times C_i, where DD is the number of integers jj such that SjTj(1jN)S_j \neq T_j (1 \leq j \leq N) just before this change.

There are 2N×(2N1)2^N \times (2^N - 1) pairs (S,T)(S, T) of different sequences of length NN consisting of 00 and 11. Compute the sum of f(S,T)f(S, T) over all of those pairs, mod (109+7)(10^9+7).

对于由 0011 组成的长度为 NN 的两个序列 SSTT ,我们可以这样定义 f(S,T)f(S, T)

  • 考虑在 SS 上重复以下操作,使 SS 等于 TTf(S,T)f(S, T) 是这些操作可能的最小总成本。

    • SiS_i (从 00 改为 11 ,反之亦然)。此操作的成本为 D×CiD \times C_i ,其中 DD 是在此操作之前有 jj 的整数 SjTj(1jN)S_j \neq T_j (1 \leq j \leq N) 的个数。

2N×(2N1)2^N \times (2^N - 1) 对长度为 NN 的不同序列 (S,T)(S, T)0011 组成。计算所有这些序列对中 f(S,T)f(S, T) 的和,模为 (109+7)(10^9+7)

输入格式

输入内容按以下格式标准输入:

NN
C1C_1 C2C_2 \cdots CNC_N

输出格式

打印 f(S,T)f(S, T) 的和,取模 (109+7)(10^9+7) .

样例 #1

样例输入 #1

1
1000000000

样例输出 #1

999999993

样例 #2

样例输入 #2

2
5 8

样例输出 #2

124

样例 #3

样例输入 #3

5
52 67 72 25 79

样例输出 #3

269312

说明

数据规模与约定

  • 1N2×1051 \leq N \leq 2 \times 10^5
  • 1Ci1091 \leq C_i \leq 10^9
  • 所有输入值均为整数。

样例 11 解释

有两对长度为 22 的不同序列 (S,T)(S, T) ,分别由 0011 组成,如下所示:

  • S=(0),T=(1):S = (0), T = (1): 中的 S1S_1 改为 11 ,可以得到 S=TS = T ,代价是 10000000001000000000 ,所以是 f(S,T)=1000000000f(S, T) = 1000000000
  • S=(1),T=(0):S = (1), T = (0):S1S_1 改为 00 ,可以得到 S=TS = T ,代价是 10000000001000000000 ,所以是 f(S,T)=1000000000f(S, T) = 1000000000

这些值的总和是 20000000002000000000 ,我们应该打印出它的模数 (109+7)(10^9+7) ,即 999999993999999993

样例 22 解释

1212 对长度为 33 的不同序列 (S,T)(S, T)0011 组成,其中包括

  • S=(0,1),T=(1,0)S = (0, 1), T = (1, 0)

在这种情况下,如果我们先将 S1S_1 改为 11 ,然后再将 S2S_2 改为 00 ,则总成本为 5×2+8=185 \times 2 + 8 = 18 。我们不可能以更小的代价得到 S=TS = T ,所以是 f(S,T)=18f(S, T) = 18