#include using namespace std; #define ALL(x) x.begin(),x.end() #define rep(i,n) for(int i=0;i<(n);i++) #define debug(v) cout<<#v<<":";for(auto x:v){cout<bool chmax(T &a,const T &b){if(abool chmin(T &a,const T &b){if(b vector> matplus(vector> a,vector> b){ asert(a.size()==b.size() and a[0].size()==b[0].size()); for(int i=0;i vector> matminus(vector> a,vector> b){ asert(a.size()==b.size() and a[0].size()==b[0].size()); for(int i=0;i vector> matmul(vector> a,vector> b){ assert(a[0].size()==b.size()); int n=b.size(); vector> ret(a.size(),vector(b[0].size(),0)); for(int i=0;i vector> matpow(vector> a,ll k){ assert(a.size()==a[0].size()); int n=a.size(); vector> ret(n,vector(n,0)); for(int i=0;i0){ if(k&1) ret=matmul(ret,a); a=matmul(a,a); k>>=1; } return ret; } //mod vector> matplus_mod(vector> a,vector> b){ assert(a.size()==b.size() and a[0].size()==b[0].size()); for(int i=0;i=mod) a[i][j]-=mod; } } return a; } vector> matminus_mod(vector> a,vector> b){ assert(a.size()==b.size() and a[0].size()==b[0].size()); for(int i=0;i> matmul_mod(vector> a,vector> b){ assert(a[0].size()==b.size()); int n=b.size(); vector> ret(a.size(),vector(b[0].size(),0)); for(int i=0;i> matpow_mod(vector> a,ll k){ assert(a.size()==a[0].size()); int n=a.size(); vector> ret(n,vector(n,0)); for(int i=0;i0){ if(k&1) ret=matmul_mod(ret,a); a=matmul_mod(a,a); k>>=1; } return ret; } signed main(){ cin.tie(0); ios::sync_with_stdio(0); ll n,p;cin>>n>>p; vector a(n); a[0]=0;a[1]=1; for(int i=2;i=0;i--){ sum=(sum+a[i])%mod; ans=(ans+sum*a[i]%mod)%mod; } cout<