logo AlgoBeat OnlineJudge
登录 注册

#216381. [ECUSTPC 2026 Spring] 朝复夕

内存限制:1024 MiB 时间限制:2000 ms 标准输入输出
题目类型:VJudge(洛谷) 评测方式:VJudge
上传者: 匿名

题目描述

:::epigraph 朝复夕,朝夕复。 :::


本题和试题 G 朝复习没有关系。

小 T 准备出一些经典的问题……

对于给定一个长度为 的排列 ,小 T 将进行一次操作

  • 取一对下标 ,交换 中的

对于所有不同的合法操作 ,小 T 需要计算交换之后的排列所表示的置换的阶数之和。

由于答案可能很大,小 T 需要计算答案对 取模的值。

请帮助小 T 计算这个问题。

试题的提示中附带有有关于置换和排列的相关信息。

输入格式

第一行输入一个整数 ,表示测试数据的数量。

每组测试数据第一行输入一个整数 ,表示排列的长度。

随后一行输入 个整数 ,表示所给定的排列。

保证所有测试数据输入中的 ,且每组测试数据给定序列一定是一个合法的排列。

输出格式

对于每组测试数据输出一行一个整数,表示对于所有不同的合法操作 ,交换之后的排列所表示的置换的阶数之和对 取模的值。

样例

样例输入 1

2
3
2 3 1
4
2 1 4 3

样例输出 1

6
20

数据范围与提示

样例 1 解释

对于第 组测试数据,共有 种不同的交换方式:

  • 交换 ,排列变为 ,可以注意到 ,因为 ,因此阶数为
  • 交换 ,排列变为 ,可以注意到 ,阶数为
  • 交换 ,排列变为 ,可以注意到 ,阶数为

因此答案为

提示

一个 的排列是一个长度为 且其中每个 的整数都出现且仅出现一次的序列,这个排列的长度也为 .

,一个 的置换是指从 的一个双射。

一个长度为 的排列 可以表示一个置换 ,也即 .

例如第 组样例的 表示的置换是 ,其中

长度为 恒等置换 定义为 ,例如一个长度为 的恒等置换 有:

两个置换 的复合 表示的是 这个置换。

长度为 的置换的幂次 (其中 是非负整数)定义为

长度为 的置换的阶数 定义为最小的正整数 ,满足 .