#agc028b. [agc028_b]Removing Blocks

[agc028_b]Removing Blocks

题目描述

NN 个块按照从左到右的顺序排列,编号从 11NN。每个块都有一个权重,第 ii 个块的权重是 AiA_i。Snuke 将对这些块进行 NN 次操作:

  • 选择一个尚未被移除的块,然后将它移除。这个操作的代价是与被移除的块相连的块的权重之和(包括被移除的块自身)。这里,两个块 xxyy ( xyx \leq y ) 被称为“相连”,当对于所有的 zz ( xzyx \leq z \leq y ) ,块 zz 还没有被移除。

对于所有 N!N! 种 Snuke 移除块的顺序,计算 NN 个操作的总代价,并计算这 N!N! 个总代价的和。由于答案可能非常大,所以将其对 109+710^9+7 取模运算。

约束条件

  • 1N1051 \leq N \leq 10^5
  • 1Ai1091 \leq A_i \leq 10^9
  • 输入数据中的所有值均为整数。

输入

从标准输入读入输入数据,输入格式如下:

NN A1A_1 A2A_2 ...... ANA_N

输出

对于所有 N!N! 种顺序,计算 NN 个操作的总代价,并输出这 N!N! 个总代价的和,对 109+710^9+7 取模。

示例输入1

2
1 2

示例输出1

9

首先,我们考虑顺序 "块 11 -> 块 22"。在第一个操作中,操作的代价是 1+2=31+2=3,因为块 1122 是相连的。在第二个操作中,操作的代价是 22,因为只有块 22 剩下了。因此,这个顺序下的两个操作的总代价是 3+2=53+2=5

然后,我们考虑顺序 "块 22 -> 块 11"。在第一个操作中,操作的代价是 1+2=31+2=3,因为块 1122 是相连的。在第二个操作中,操作的代价是 11,因为只有块 11 剩下了。因此,这个顺序下的两个操作的总代价是 3+1=43+1=4

因此,答案是 5+4=95+4=9

示例输入2

4
1 1 1 1

示例输出2

212

示例输入3

10
1 2 4 8 16 32 64 128 256 512

示例输出3

880971923