[SDOI2019]移动金币
题号:NC50818
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 32 M,其他语言64 M
64bit IO Format: %lld

题目描述

一个的棋盘上最初摆放有m枚金币。其中每一枚金币占据了一个独立的格子,任意一个格子内最多只有一枚金币。
Alice和Bob将要进行如下的一场游戏。二人轮流操作,且Alice先行。当轮到一个玩家的时候,他可以选择一枚金币,并将其向左移动任意多格,且至少移动一格。金币不能被移出棋盘,也不能越过其它金币。
如果轮到一个玩家的时候他已经无法做出任何有效操作了(显然这个时候m枚金币恰好落在最左侧的m个格子中),则被判定为输家。已经知道Alice和Bob都是极致聪明的人,他们在任何局面下总能做出最优的操作。那么有多少初始状态能保证Alice必胜呢?

输入描述:

输入仅有一行并包含两个正整数,依次为n和m,如题目所述。

输出描述:

输出一个整数,表示有多少初始状态可以保证Alice作为先手方能先手必胜。由于答案可能很大,请输出关于取模后的值。
示例1

输入

复制
10 3

输出

复制
100
示例2

输入

复制
199 43

输出

复制
981535230
示例3

输入

复制
99999 47

输出

复制
39178973

备注:

子任务1(50分):
子任务2(50分):