#CF938E. 最大历史值

最大历史值

E. 最大历史值

时间限制: 3秒
内存限制: 256 MB


题目描述

给定一个长度为 nn 的数组 aa。定义 faf_a 如下:

  • 初始时 fa=0f_a = 0M=1M = 1
  • 对于每个 2in2 \le i \le n,如果 aM<aia_M < a_i,则令 fa=fa+aMf_a = f_a + a_M,然后令 M=iM = i

计算 faf_a 在数组 aa 的所有 n!n! 种排列下的总和,结果对 109+710^9 + 7 取模。

注意:两个元素若下标不同则视为不同,因此对于每个数组 aa,恰好有 n!n! 种排列。


输入

第一行包含一个整数 nn1n10000001 \le n \le 1\,000\,000)——数组 aa 的大小。

第二行包含 nn 个整数 a1,a2,,ana_1, a_2, \dots, a_n1ai1091 \le a_i \le 10^9)。


输出

输出一个整数——faf_a 在所有 n!n! 种排列下的总和,对 109+710^9 + 7 取模。


样例

样例 1

2
1 3
1

样例 2

3
1 1 2
4

提示

对于第二个样例,所有排列如下(pp 为原始数组 aa 的下标排列):

  • p=[1,2,3]p = [1, 2, 3]fa=1f_a = 1
  • p=[1,3,2]p = [1, 3, 2]fa=1f_a = 1
  • p=[2,1,3]p = [2, 1, 3]fa=1f_a = 1
  • p=[2,3,1]p = [2, 3, 1]fa=1f_a = 1
  • p=[3,1,2]p = [3, 1, 2]fa=0f_a = 0
  • p=[3,2,1]p = [3, 2, 1]fa=0f_a = 0

总和为 44