#P8338. [AHOI2022] 排列

    ID: 9417 远端评测题 1000ms 512MiB 尝试: 0 已通过: 0 显示难度提高+/省选− 上传者: 标签>数学暴力数据结构各省省选平衡树2022安徽O2优化优先队列素数判断,质数,筛法

[AHOI2022] 排列

题目描述

对于一个长度为 nn 的排列 P=(p1,p2,…,pn)P = (p_1, p_2, \ldots, p_n) 和整数 k≥0k \ge 0,定义 PP 的 kk 次幂

$$P^{(k)} = \left( p^{(k)}_1, p^{(k)}_2, \ldots, p^{(k)}_n \right),$$

该排列的第 ii 项为

$$p^{(k)}_i = \begin{cases} i, & k = 0, \\ p^{(k - 1)}_{p_i}, & k > 0. \end{cases}$$

容易证明任意排列的任意次幂都是一个排列。

定义排列 PP 的循环值 v(P)v(P) 为最小的正整数 kk 使得 P(k+1)=PP^{(k + 1)} = P。

给出一个长度为 nn 的排列 A=(a1,a2,…,an)A = (a_1, a_2, \ldots, a_n),对于整数 1≤i,j≤n1 \le i, j \le n,定义 f(i,j)f(i, j):若存在 k≥0k \ge 0 使得 ai(k)=ja^{(k)}_i = j,则 f(i,j)=0f(i, j) = 0,否则设排列 AijA_{i j} 为将排列 AA 的第 ii 项 aia_i 和第 jj 项 aja_j 交换后得到的排列,则 f(i,j)=v(Aij)f(i, j) = v(A_{i j})。

求 ∑i=1n∑j=1nf(i,j)\sum_{i = 1}^{n} \sum_{j = 1}^{n} f(i, j) 的值。答案可能很大,你只需要输出其对 (109+7)({10}^9 + 7) 取模的结果。

输入格式

本题有多组测试数据。输入数据的第一行为一个整数 TT,表示测试数据组数。

对于每组测试数据,第一行一个正整数 nn 表示排列的长度,接下来一行 nn 个整数 a1,a2,…,ana_1, a_2, \ldots, a_n,描述输入的排列。

输出格式

对于每组数据输出一行一个整数,表示题目所求的答案对 (109+7)({10}^9 + 7) 取模的结果。

2
3
1 2 3
3
2 3 1

12
0

提示

【样例解释 #1】

对于第一组测试数据,$f(1, 2) = f(2, 1) = f(2, 3) = f(3, 2) = f(1, 3) = f(3, 1) = 2$,其余的 f(i,j)f(i, j) 均为 00。

对于第二组测试数据,所有的 f(i,j)f(i, j) 均为 00。

【样例 #2】

见附件中的 perm/perm2.in 与 perm/perm2.ans。

该组样例中,第一个测试数据满足 n≤35n \le 35,前四个测试数据满足 n≤200n \le 200,所有测试数据满足 n≤2500n \le 2500。

【样例 #3】

见附件中的 perm/perm3.in 与 perm/perm3.ans。

该组样例中,第一个测试数据满足特殊性质 A,第二个测试数据满足特殊性质 B,第三个测试数据满足特殊性质 C,前四个测试数据满足 n≤105n \le {10}^5,第五个测试数据满足 n≤5×105n \le 5 \times {10}^5。

特殊性质的具体内容参见数据范围部分。

【数据范围】

对于 100%100 \% 的测试数据,1≤T≤51 \le T \le 5,1≤n≤5×1051 \le n \le 5 \times {10}^5,1≤ai≤n1 \le a_i \le n。

测试点编号 n≤n \le 特殊性质
1∼21 \sim 2 105{10}^5 A
33 3535 无
44 200200
55 25002500
66 105{10}^5 B
77 C
88 无
9∼109 \sim 10 5×1055 \times {10}^5

特殊性质 A:ai=(i mod n)+1a_i = (i \bmod n) + 1。
特殊性质 B:对于任意 1≤i≤n1 \le i \le n,存在 1≤k≤201 \le k \le 20,ai(k)=ia^{(k)}_i = i。
特殊性质 C:存在大小不超过 1010 的集合 SS,使得对于任意 1≤i≤n1 \le i \le n,存在 x∈S,k≥0x \in S, k \ge 0,ax(k)=ia^{(k)}_x = i。

【提示】

输入数据规模较大,请使用较为快速的输入方式。