Brainfuck
题号:NC14316
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 128 M,其他语言256 M
64bit IO Format: %lld

题目描述

𝑏𝑟𝑎𝑖𝑛𝑓𝑢𝑐𝑘是一种很有趣的语言,该题只考虑他的简化版。
这个语言的程序是一段字符串,一开始命令指针指在位置1,每次执行
后往后跳1格
一开始你有一个变量𝑥,这个语言有4种指令:
(1)+ : 𝑥 + +
(2)− : 𝑥 − −
(3)[:若𝑥等于0,则命令指针跳到这个括号匹配的]
(4)] :若𝑥不等于0,则命令指针跳到这个括号匹配的[
通俗的理解的话就是:
[− − −− > 𝑤ℎ𝑖𝑙𝑒(𝑥){
] − − − − >}
一段程序是合法的当且仅当:括号都是匹配的,且程序不死循环
现在白鸟阳想知道长度为𝑁的合法程序有多少个,答案对𝑀取模

输入描述:

第一行两个正整数𝑛, 𝑚

输出描述:

第一行一个整数,表示答案
示例1

输入

复制
2 1000000000

输出

复制
5

备注:

对于30%的数据,1 ≤ 𝑁 ≤ 10
对于50%的数据,1 ≤ 𝑁 ≤ 50
对于100%的数据,1 ≤ 𝑁 ≤ 100,1 ≤ 𝑀 ≤ 109