题目描述
コンテストで使う N 問の問題がジャッジに選ばれ、各問に配点を付ける段階になりました。
問題 i の配点 Ai は、1 以上 N 以下の整数でなければなりません。 また、すでに問題は難易度順に並んでおり、A1 ≤ A2 ≤ … ≤ AN でなければなりません (複数問の配点が同じになるのは構いませんが)。
ICPC のファンであるあなたは、解いた問題数が多い参加者ほど上位となってほしいと考えています。 この理由から、任意の k (1 ≤ k ≤ N−1) に対して、任意の k 問の配点の合計が任意の k+1 問の配点の合計より真に小さくなるようにしたい、とあなたは考えています。
このような配点の付け方は何通りあるでしょうか?この数を与えられた素数 M で割った余りを求めてください。
输入格式
入力は以下の形式で標準入力から与えられる。
N M
输出格式
配点の付け方の数を M で割った余りを出力せよ。
题目大意
- 有 n 道还未赋分的题目,你需要给这 n 道题目赋分。
- 设第 i 道题目的分数为 Ai。给题目赋分的方案需要满足:
- 对于任意 i∈[2,n],Ai−1≤Ai。
- 对于任意 i∈[1,n],1≤Ai≤n。
- 对于任意一个大小为 k(1≤k<n)的题目子集 S 和任意一个大小为 k+1 的题目子集 T,需要满足:∑x∈SAx<∑x∈TAx。
- 你需要计算,有多少种给题目赋分的方案,使得能满足上述三个条件。请求出答案对 M 取模的结果。
提示
制約
- 2 ≤ N ≤ 5000
- 9 × 108 < M < 109
- M は素数である。
- 入力中のすべての値は整数である。
Sample Explanation 1
可能な配点の付け方は (1, 1), (1, 2), (2, 2) です。
Sample Explanation 2
可能な配点の付け方は (1, 1, 1), (1, 2, 2), (1, 3, 3), (2, 2, 2), (2, 2, 3), (2, 3, 3), (3, 3, 3) です。