题目描述
小 C 的房间乱透了,他需要锻炼自己的清理能力。
对于一个长度为 len 的序列 A,定义一次清理操作为:
-
如果 len=1,则什么都不做,否则:
-
设 Ai 为序列中的第 i 个元素(1<i<len , len 为序列长度),若 Ai−1>Ai 或 Ai+1>Ai 则标记 Ai 。 若 A2>A1 则标记 A1 , 若 Alen−1>Alen 则标记 Alen 。
-
然后,将有标记的元素从序列中删除。
求有多少种长度为 N 的满足以下条件的序列 :
- 1∼N 这 N 个数在序列中各出现了一次;
- 进行恰好 K 次清理操作后,该序列只含有 1 个元素。即进行 K−1 次操作时,序列长度 >1;进行 K 次清理操作后,序列长度 =1。
满足条件的序列可能很多,所以请将结果对 P 取模。
输入格式
输入仅一行,包含三个整数 N,K,P。
输出格式
输出一行一个整数,表示满足条件的序列个数对 P 取模的结果。
5 3 100000007
4
样例解释 1
所有满足条件的序列列举如下:
- 4,1,3,2,5
- 4,2,3,1,5
- 5,1,3,2,4
- 5,2,3,1,4
数据范围
对于 30% 的数据,保证 1≤K,N≤20 。
对于 100% 的数据,保证 1≤K,N≤1000 , N≥2 , 108≤P≤109。