#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 m,k;cin>>m>>k; vector> g(m,vector(m,0)); rep(i,m){ rep(j,m){ g[i][(i+j)%m]++; g[i][i*j%m]++; } } vector v(m,0);v[0]=1; while(k){ if(k%2){ vector vn(m,0); rep(i,m){ rep(j,m){ vn[j]+=v[i]*g[i][j]%mod; vn[j]%=mod; } } swap(v,vn); } k/=2; g=matmul_mod(g,g); } cout<