#codefestival2016qualCe. [codefestival_2016_qualC_e]Encyclopedia of Permutations

[codefestival_2016_qualC_e]Encyclopedia of Permutations

题目描述

某天高桥先生拿起一本包含 NN 个整数 11NN 的全排列的字典。该字典有 N!N! 页,第 ii 页(1iN!1 ≤ i ≤ N!)包含字典中第 ii 个按字典序排列的排列。

高桥先生希望在这本字典中查找一个特定长度为 NN 的排列,但他忘记了其中一部分。

他记得的排列可以用序列 P1,P2,...,PNP_1, P_2, ..., P_N 来描述。如果 Pi=0P_i = 0,则表示他忘记了排列中的第 ii 个元素;否则,表示他记得排列中的第 ii 个元素,且其值为 PiP_i

他决定查找字典中所有可能的排列。计算他需要检查的页码之和,对 109+710^9 + 7 取模。

约束条件

  • 1N5000001 ≤ N ≤ 500000
  • 0PiN0 ≤ P_i ≤ N
  • 如果 iji ≠ j1i,jN1 ≤ i, j ≤ N),则 PiPjP_i ≠ P_j,且 Pi0P_i ≠ 0Pj0P_j ≠ 0

输入

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

NN P1P_1 P2P_2 ...... PNP_N

输出

打印他需要检查的页码之和,对 109+710^9 + 7 取模。

示例输入 1

4
0 2 3 0

示例输出 1

23

可能的排列为 [11, 22, 33, 44] 和 [44, 22, 33, 11]。前者在第 11 页,后者在第 2222 页,所以答案为 2323

示例输入 2

3
0 0 0

示例输出 2

21

由于长度为 33 的所有排列都可行,答案为 1+2+3+4+5+6=211 + 2 + 3 + 4 + 5 + 6 = 21

示例输入 3

5
1 2 3 5 4

示例输出 3

2

高桥先生记得了排列的所有元素。

示例输入 4

1
0

示例输出 4

1

字典只有一页。

示例输入 5

10
0 3 0 0 1 0 4 0 0 0

示例输出 5

953330050