题目描述
我们说一个长为 m 的正整数序列 [a1,…,am] 是好的,当且仅当它满足以下性质:
- m≠0,也就是序列非空。
- ai>ai−1 (2≤i≤m),也就是序列严格递增。
- 1≤ai≤n (1≤i≤m),也就是序列的元素都是 ≤n 的正整数。
- aixorai+1xorai+2≠0 (1≤i≤m−2),也就是序列任意连续三项异或和都不是 0。
给定 n,请你数一数总共有多少个不同的好的序列。两个序列不同,当且仅当它们长度不同或者长度相同但是某个位置上的数不同。答案对 mod 取模。
输入格式
输入一行两个正整数 n,mod。
输出格式
输出一个非负整数表示答案。
样例输入输出
样例输入 1
1 123456789
样例输出 1
1
样例输入 2
2 100000000
样例输出 2
3
样例 2 解释
满足条件的序列有 [1],[2],[1,2] 三种。
样例输入 3
3 666666666
样例输出 3
6
样例 3 解释
满足条件的序列有 [1],[2],[3],[1,2],[2,3],[1,3] 六种。
样例输入 4
5 987654321
样例输出 4
26
样例输入 5
322 998244353
样例输出 5
782852421
数据范围
本题 10 个测试点,每个测试点 10 分。对于所有测试点,1≤n≤106,108≤mod≤109。详细数据范围如下表。
测试点编号 | n≤ |
---|---|
1 | 5 |
2 | 10 |
3 | 100 |
4 | 500 |
5 | 2000 |
6 | 5000 |
7 | 5×104 |
8 | 2×105 |
9,10 | 106 |
时间限制:1s
空间限制:1024MB