#P0402. 橡皮筋与钉子
橡皮筋与钉子
题目描述
汪老师有 个钉子,它将它们钉在一个平面上。
其中有 个红色的钉子,以这 个钉子作为顶点能够形成一个正 边形。这 个钉子按逆时针从 编号到 。
还有一个蓝色的钉子,这个钉子比其它钉子的直径要稍微小一点点,它坐落在正 边形的中心。
初始的时候还有一根橡皮筋,它缠绕在红色的钉子外面。
汪老师今天非常无聊所以他准备玩一个游戏。初始时,他有一个空的数列 。只要橡皮筋没有碰到蓝色的钉子,它就会一直执行如下操作:
- 选择编号为 的红色钉子 —— 要求是这个钉子目前没有被移除;
- 移除掉编号为 的红色钉子;
- 将 添加到数列 的末尾。
汪老师想要知道最终的数列 (即:进行最后一次操作后橡皮筋碰到蓝色钉子对应的数列 )有多少种不同的可能。
由于方案数可能很多,所以你只需要输出总的方案数模 的结果即可。

上图演示了 且 以及 且 时的两个例子。
注:如果你是pdf文件,或者没有看到上方的动画,你可以点击 此链接 查看上方动画
输入格式
一行,两个整数 和 ()——分别表示红色钉子的数量以及要模的那个数字。
数据保证 是一个素数。
输出格式
输出一个整数,表示最终得到的不同数列 的数量模 的结果。
样例输入1
4 100000007
样例输出1
16
样例输入2
1145 141919831
样例输出2
105242108
说明/提示
样例 1 解释
样例1中,最终的排列 一共有 种情况,它们分别是:
数据规模与约定
- 对于 的数据,
- 对于 的数据,
- 对于 的数据,