AT_agc071_e [AGC071E] Procrastinate Counter

题目描述

[problemUrl]: https://atcoder.jp/contests/agc071/tasks/agc071_e 对于排列 $P = (P_1, P_2, \dots, P_N)$(即 $1, 2, \dots, N$ 的排列),我们定义长度为 $N$ 的整数序列 $f(P)$ 如下: - 初始化整数序列 $X$ 为 $X = (P_1, P_2, \dots, P_N)$,并持续对 $X$ 进行以下操作,直到 $X$ 成为单调递增序列。可以证明,对于任意排列 $P$,$X$ 经过有限次操作后一定会变为单调递增序列。 - 找到满足 $X_i > X_{i+1}$ 的最小下标 $i$($1 \leq i < N$),记为 $k$。将 $X$ 的第 $k$ 项移动到末尾。更准确地说,将 $X$ 替换为 $(X_1, X_2, \dots, X_{k-1}, X_{k+1}, X_{k+2}, \dots, X_N, X_{k})$。 记整数 $x$ 在整个操作过程中被移动到末尾的次数为 $C_x$,则定义 $f(P) = (C_1, C_2, \dots, C_N)$。 请计算所有可能的 $f(P)$ 的种类数对素数 $M$ 取模后的结果。

输入格式

输入从标准输入按以下格式给出: > $N$ $M$

输出格式

输出答案。

说明/提示

### 约束条件 - $1 \leq N \leq 500$ - $10^8 \leq M \leq 10^9$ - $M$ 是素数 - 输入中的所有值均为整数 ### 样例解释 #1 例如,当 $P = (1, 4, 3, 2)$ 时,初始化的 $X = (1, 4, 3, 2)$,操作过程如下: 1. 由于 $X_1 \leq X_2$ 但 $X_2 > X_3$,将 $X_2 = 4$ 移动到末尾,$X$ 变为 $(1, 3, 2, 4)$。 2. 将 $X_2 = 3$ 移动到末尾,$X$ 变为 $(1, 2, 4, 3)$。 3. 将 $X_3 = 4$ 移动到末尾,$X$ 变为 $(1, 2, 3, 4)$。 此时,元素 $1, 2, 3, 4$ 被移动到末尾的次数分别为 $0, 0, 1, 2$ 次,因此 $f(P) = (0, 0, 1, 2)$。 翻译由 DeepSeek R1 完成