AT_arc221_b [ARC221B] Two-Powered Sum
Description
正整数 $ N $ と素数 $ P $ が与えられます.
すべての要素が $ 0 $ である長さ $ N $ の数列 $ A=(A_1,A_2,\ldots,A_N) $ があります.
あなたは以下の操作を $ 0 $ 回以上好きな回数繰り返すことができます.
- 非空な $ \lbrace 1,2,\ldots,N\rbrace $ の部分集合 $ S $ を選ぶ. $ \displaystyle x=\sum_{i\in S}2^{i-1} $ として,各 $ i\in S $ に対して $ A_i $ を $ x $ で置き換える.
操作を繰り返すことで最終的に得られる $ A $ としてあり得るものの個数を $ P $ で割った余りを求めてください.
Input Format
入力は以下の形式で標準入力から与えられる.
> $ N $ $ P $
Output Format
答えを出力せよ.
Explanation/Hint
### Sample Explanation 1
得られる $ A $ は $ (0),(1) $ の $ 2 $ 通りです.
### Sample Explanation 2
得られる $ A $ は $ (0,0),(0,2),(1,0),(1,2),(1,3),(3,2),(3,3) $ の $ 7 $ 通りです.
### Constraints
- $ 1\leq N\leq 700 $
- $ P $ は $ 10^8\lt P\lt 10^9 $ を満たす素数
- 入力される数値は全て整数