#YDRG002D. 冬日足音

冬日足音

Background

Snipaste2023-08-0720-28-03.png

Description

定义一个长度为 nn0101 序列 aa 是合法的当且仅当:

  • a1=an=0a_1=a_n=0
  • 不存在两个连续的 11

小 C 希望对这个序列进行一些变换,一次变换的具体形式如下:

  • 选择序列中的一个 00,并将其修改为 11

小 C 希望变换后的序列满足如下条件:

  • 序列仍然合法。
  • 再对任意一个可变换位置(如果有)进行变换,序列都会不合法。

小 C 希望在此基础上最小化变换次数,并在最小化变换次数的基础上,统计有几种变换方案,并把方案数记作序列 aa 的权值 f(a)f(a)。两种变换方案不同当且仅当变换后的序列不同。

特别的,若 aa 不合法,则 f(a)=0f(a)=0

现在,给定序列 aa 的长度 nn,求 f(a)\sum f(a)pp 取模后的结果。

Format

Input

一行两个正整数 n,pn,p,同题意。

Output

一行一个正数,表示答案。

Samples

3 1000000007
2
154147 1000000007
30911724

Limitation

对于 100%100\% 的数据,1n10181\le n\le 10^{18}109p1.1×109,p1(mod2)10^9\leq p\leq 1.1\times 10^9,p\equiv1\pmod2。各子任务的约束如下表所示:

子任务编号 nn 分值
Subtask #1 5\le 5 1313
Subtask #2 5×103\le 5\times 10^3 2121
Subtask #3 5×104\le 5\times 10^4 1313
Subtask #4 5×106\le 5\times 10^6 2323
Subtask #5 1018\le 10^{18} 3030