Problem Statement

For a sequence of length $N$, $A = (A_1,A_2,\dots,A_N)$, consisting of integers between $1$ and $N$, inclusive, and an integer $i\ (1\leq i \leq N)$, let us define a sequence of length $10^{100}$, $B_i=(B_{i,1},B_{i,2},\dots,B_{i,10^{100}})$, as follows.

  • $B_{i,1}=i$.
  • $B_{i,j+1}=A_{B_{i,j}}\ (1\leq j<10^{100})$.

Additionally, let us define $S_i$ as the number of distinct integers that occur exactly once in the sequence $B_i$.
More formally, $S_i$ is the number of values $k$ such that exactly one index $j\ (1\leq j\leq 10^{100})$ satisfies $B_{i,j}=k$.

You are given an integer $N$. There are $N^N$ sequences that can be $A$. Find the sum of $\displaystyle \sum_{i=1}^{N} S_i$ over all of them, modulo $M$.

Constraints

  • $1\leq N \leq 2\times 10^5$
  • $10^8\leq M \leq 10^9$
  • $N$ and $M$ are integers.

Input

The input is given from Standard Input in the following format:

$N$ $M$

Output

Print the answer as an integer.


Sample Input 1

4 100000000

Sample Output 1

624

As an example, let us consider the case $A=(2,3,3,4)$.

  • For $i=1$: we have $B_1=(1,2,3,3,3,\dots)$, where two integers, $1$ and $2$, occur exactly once, so $S_1=2$.
  • For $i=2$: we have $B_2=(2,3,3,3,\dots)$, where one integer, $2$, occurs exactly once, so $S_2=1$.
  • For $i=3$: we have $B_3=(3,3,3,\dots)$, where no integers occur exactly once, so $S_3=0$.
  • For $i=4$: we have $B_4=(4,4,4,\dots)$, where no integers occur exactly once, so $S_4=0$.

Thus, we have $\displaystyle \sum_{i=1}^{N} S_i=2+1+0+0=3$.

If we similarly compute $\displaystyle \sum_{i=1}^{N} S_i$ for the other $255$ sequences, the sum of this value over all $256$ sequences is $624$.


Sample Input 2

7 1000000000

Sample Output 2

5817084

Sample Input 3

2023 998244353

Sample Output 3

737481389

Print the sum modulo $M$.


Sample Input 4

100000 353442899

Sample Output 4

271798911

题目讲的很复杂的样子。但是如果我们将 \(a_i\) 看作从 \(i\) 向 \(a_i\) 连一条边,那么将会连出来一棵基环树。题目要求的就是所有带标号基环树中所有非环上节点的深度和。

这题看似dp,却难以dp。考虑从数学角度入手。

枚举深度,尝试求出在所有的基环树中有多少个深度为 \(i\) 的节点。首先可以选出这个点到环上的 \(i\) 个节点组成的链,共 \(C_{n}^i\times i!\),然后选出这个环,枚举环上有 \(j\) 个节点,众所周知,一个 \(j\) 元环有 \((j-1)!\) 种排列方法,但是还要枚举这条链接到换上的那个节点,再乘个 \(j\),有 \(j!\) 种方法。剩下的点随便连,共 \(n^{n-i-j}\) 种。

最终答案为

\(\begin{aligned}
&\sum\limits_{i=1}^ni\sum\limits_{j=1}^{n-i}C_{n}^i\times i!\times C_{n-i}^j\times j!\times n^{n-i-j}\\&=\sum\limits_{i=1}^ni\sum\limits_{j=1}^{n-i}\frac{n!}{i!(n-i)!}\times i!\times \frac{(n-i)!}{j!(n-i-j)!}\times j!\times n^{n-i-j}\\&=\sum\limits_{i=1}^ni\sum\limits_{j=1}^{n-i}\frac{n!}{(n-i-j)!}\times n^{n-i-j}
\end{aligned}\)

会发现此时如果能调换一下求和顺序,会顺眼很多。但是后面即和 \(i\) 又和 \(j\) 有关,但是也之和 \(i+j\) 有关。令 \(T=i+j\)

\(\begin{aligned}
&=\sum\limits_{i=1}^ni\sum\limits_{j=1}^{n-i}\frac{n!}{(n-i-j)!}\times n^{n-i-j}\\&=\sum\limits_{T=2}^n\frac{n!}{(n-T)!}n^{n-T}\sum\limits_{i=1}^{T-1}i\\&=\sum\limits_{T=2}^n\frac{n!}{(n-T)!}n^{n-T}\frac 12 T(T-1)
\end{aligned}\)

#include<cstdio>
const int N=2e5+5;
int n,P,f[N],pw[N],ans;
int main()
{
scanf("%d%d",&n,&P);
for(int i=pw[0]=1;i<=n;i++)
pw[i]=pw[i-1]*1LL*n%P;
f[n+1]=1;
for(int i=n;i>=1;i--)
f[i]=f[i+1]*1LL*i%P;
for(int i=2;i<=n;i++)
(ans+=1LL*f[n-i+1]*pw[n-i]%P*(i*(i-1LL)/2%P)%P)%=P;
printf("%d",ans);
}

随机推荐

  1. 3.你所不知道的go语言控制语句——Leetcode习题69

    目录 本篇前瞻 Leetcode习题9 题目描述 代码编写 控制结构 顺序结构(Sequence) 声明和赋值 多返回值赋值 运算符 算术运算符 位运算符 逻辑运算 分支结构 if 语句 switch ...

  2. 11、Mybatis之逆向工程

    11.1.正向与逆向工程概述 正向工程:先创建Java实体类,由框架负责根据实体类生成数据库表:例如Hibernate是支持正向工程的. 逆向工程:先创建数据库表,由框架负责根据数据库表,反向生成Ja ...

  3. 9、Mybatis之动态SQL

    9.1.环境搭建 9.1.1.创建新module 创建名为mybatis_dynamicSQL的新module,过程参考5.1节 9.1.2.创建Emp实体类 package org.rain.myb ...

  4. 标题:在Godot中使用Node2D创建自定义的Label

    在Godot游戏引擎中,我们经常需要在游戏中显示文本信息.通常,我们可以使用Label节点来实现这一点.但是,在某些情况下,你可能希望更灵活地控制文本的显示和样式.在本篇博客中,我们将学习如何通过使用 ...

  5. 2023-08-30:用go语言编写。两个魔法卷轴问题。 给定一个数组arr,其中可能有正、负、0, 一个魔法卷轴可以把arr中连续的一段全变成0,你希望数组整体的累加和尽可能大。 你有两个魔法卷轴,

    2023-08-30:用go语言编写.两个魔法卷轴问题. 给定一个数组arr,其中可能有正.负.0, 一个魔法卷轴可以把arr中连续的一段全变成0,你希望数组整体的累加和尽可能大. 你有两个魔法卷轴, ...

  6. 用 ChatGPT 做一个 Chrome 扩展 | 京东云技术团队

    用ChatGPT做了个Chrome Extension 最近科技圈儿最火的话题莫过于ChatGPT了. 最近又发布了GPT-4,发布会上的Demo着实吸睛. 笔记本上手画个网页原型,直接生成网页.网友 ...

  7. 利用接口测试框架实现web状态的监控

    之前,我们已经说明了如何实现一个我们的接口测试框架RATF,当然这个框架不止可以用于管理我们的接口测试代码,我们还可以用他来对我们的web进行简单粗暴的监控. 原理: 1. 通过使用配置文件,对要监控 ...

  8. 分享一个 SpringBoot + Redis 实现「查找附近的人」的小技巧

    前言 SpringDataRedis提供了十分简单的地理位置定位的功能,今天我就用一小段代码告诉大家如何实现. 正文 1.引入依赖 <dependency> <groupId> ...

  9. SpringBoot拦截器和动态代理有什么区别?

    在 Spring Boot 中,拦截器和动态代理都是用来实现功能增强的,所以在很多时候,有人会认为拦截器的底层是通过动态代理实现的,所以本文就来盘点一下他们两的区别,以及拦截器的底层实现. 1.拦截器 ...

  10. 全网最详细Java-JUC

    Java-JUC ⓪基础 ❶进程&线程 进程:指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间. 线程:比进程更小的执行单位,一个进程可以启动多个线程,每条线程并行执行不同的任务 ...