#P16719. 典

题目描述

小可可在玩双栈排序。

小可可现在有两个栈 a,ba,b 和两个序列 t,qt,q。初始时,tt 是一个长度为 nn 的排列,a,b,qa,b,q 均为空。

小可可可以进行任意次操作,每次选择下面三种操作之一:

  1. tt 非空,则可以将 tt 的开头元素移动到 aa 的栈顶。操作后需要保证 aa 中的元素从栈底到栈顶严格递减。
  2. aa 的栈顶元素移动到 bb 的栈顶。
  3. bb 的栈顶元素移动到 qq 的开头。

小可可希望在操作结束后,qqtt 排序后的结果。也就是说,qq 中有 nn 个元素,且第 ii 个元素为 ii

对于每个 n=1,2,,mn=1,2,\ldots,m,小可可想知道有多少个长度为 nn 的排列 tt 能满足上述条件。

由于答案很大,请输出答案对质数 pp 取模的结果。

输入格式

一行两个整数 m,pm,p,分别表示 nn 的上限和模数。

输出格式

输出 mm 行,每行一个整数。

ii 行表示 n=in=i 时的答案对 pp 取模的结果。

样例输入1

10 531284701

样例输出1

1
2
6
22
90
394
1806
8558
41586
206098

数据范围与约定

  • 对于 20%20\% 的数据,m10m\le 10
  • 对于 50%50\% 的数据,m100m\le 100
  • 对于 80%80\% 的数据,m5000m\le 5000
  • 对于 100%100\% 的数据:
1m5×106,1\le m\le 5\times 10^6, 108<p109+9,10^8<p\le 10^9+9,

pp 为质数。