[HNOI2009]有趣的数列
题号:NC20075
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

我们称一个长度为2n的数列是有趣的,当且仅当该数列满足以下三个条件:

(1)它是从1到2n共2n个整数的一个排列{ai};

(2)所有的奇数项满足a1<a3<...<a2n-1,所有的偶数项满足a2<a4<...<a2n

(3)任意相邻的两项a2i-1与a2i(1<=i<=n)满足奇数项小于偶数项,即:a2i-1<a2i

现在的任务是:对于给定的n,请求出有多少个不同的长度为2n的有趣的数列。因为最后的答案可能很大,所以只要求输出答案 mod P的值。

输入描述:

输入文件只包含用空格隔开的两个整数n和P。
输入数据保证,50%的数据满足n ≤ 1000,100%的数据满足n ≤ 1000000且P ≤ 1000000000。

输出描述:

仅含一个整数,表示不同的长度为2n的有趣的数列个数mod P的值。
示例1

输入

复制
3 10

输出

复制
5

说明

对应的5个有趣的数列分别为(1,2,3,4,5,6),(1,2,3,5,4,6),(1,3,2,4,5,6),(1,3,2,5,4,6),(1,4,2,5,3,6)。

备注:

对于50%的数据,
对于100%的数据,