#CF1704H1. AI 游戏

AI 游戏

AI 游戏

  • 时间限制:3 秒
  • 内存限制:512 MiB

题目描述

有 (n) 座塔和 (n) 个机器人,均编号为 (1) 到 (n)。初始时,第 (i) 座塔由第 (i) 个机器人占据。

游戏开始前,先选择一个长度为 (n) 的排列 (p),再选择一个序列 (a),其中 (1\le a_i\le n) 且 (a_i\ne i)。

游戏依次进行 (n) 轮。第 (i) 轮中,若机器人 (p_i) 仍在游戏中,它会占领塔 (a_{p_i}),原先占据该塔的机器人失去这座塔;若机器人 (p_i) 已被淘汰,则本轮没有操作。每轮结束后,没有占据任何塔的机器人会被淘汰。

游戏结束后得到序列 (b),其中 (b_i) 是最终占据塔 (i) 的机器人编号。

求所有合法的 (a) 和所有排列 (p) 能产生的不同序列对 ((a,b)) 的数量,对质数 (M) 取模。

输入格式

一行两个整数 (n,M)。

输出格式

输出一个整数,表示不同序列对 ((a,b)) 的数量对 (M) 取模的结果。

样例输入 1

1 998244353

样例输出 1

0

样例输入 2

2 998244353

样例输出 2

2

样例输入 3

3 998244353

样例输出 3

24

样例输入 4

8 998244353

样例输出 4

123391016

数据范围

对于全部数据,(1\le n\le5000),(2\le M\le10^9),(M) 为质数,且 (2^{18}\mid M-1)。

子任务编号 分值 特殊限制
1 20 n≤5n\le5
2 40 n≤120n\le120
3 无特殊限制

题目来源:Codeforces 1704H1。