题号:NC317389
时间限制:C/C++/Rust/Pascal 3秒,其他语言6秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld
题目描述

一个世界可以用一个长度为

的
排列 
表示。每个人由两个不同的下标
%5Cleft(1%5Cle%20x%20%3C%20y%5Cle%20n%5Cright))
表示。

对于这个世界上任意两个人,我们分别用下标对
)
和
)
表示。由于神秘原因,两个人存在社会关系当且仅当

,否则两人不存在社会关系。若两人存在社会关系,则其关系可能是以下三种之一:

朋友:

;

宿敌:

;

路人。

如果一个世界中同时存在至少一对“朋友”关系和至少一对“宿敌”关系,则称该世界是完美的。

一共给出

个世界,你需要对每一个世界分别求解,有多少种长度为

的排列,使得该世界是完美的。由于世界很大,请将答案对给定的整数

取模后输出。
【名词解释】

长度为

的
排列:由

这

个整数、按任意顺序组成的数组(每个整数均恰好出现一次)。例如,

是一个长度为

的排列,而

和

都不是排列,因为前者存在重复元素,后者包含了超出范围的数。
输入描述:
第一行输入两个正整数
,表示世界数量、模数。
此后
行,第
行输入一个正整数
,表示第
个世界的大小。
输出描述:
对于每一个世界,新起一行输出一个整数,表示有多少种长度为
的全排列,使得该世界是完美的。
示例1
输入
复制
6 998244353
5
6
7
80
90
100
输出
复制
64
592
4760
301536989
242590902
921629252
备注:
在几乎全部的情况下,PyPy 的运行速度优于 Python,我们建议您选择对应版本的 PyPy 进行提交、而不是 Python。