#pragma region Yoyoyo #ifdef LOCAL #define _GLIBCXX_DEBUG #endif #include using namespace std; using ll=long long; using ld=long double; using i128t=__int128_t; using pii=pair; using pll=pair; const string Yes="Yes"; const string No="No"; const long long inf=1ll<<60; #ifndef LOCAL #pragma GCC target("avx2") #pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") #endif #define fi first #define se second #define pb push_back #define eb emplace_back #define mp make_pair #define all(x) (x).begin(),(x).end() #define faster ios::sync_with_stdio(false);cin.tie(nullptr); #define print(s) cout< inline bool chmax(T &a,T b){return ((a inline bool chmin(T &a,T b){return ((a>b)?(a=b,true):(false));} template ll sum(const T&a){return accumulate(all(a),0LL);} template ostream &operator<<(ostream &os,const pair&p){ os< istream &operator>>(istream &is,pair&p){ is>>p.first>>p.second; return is; } template ostream &operator<<(ostream &os,const vector&v){ int s=v.size(); for(int i=0;i istream &operator>>(istream &is,vector&v){ for(auto &x:v){ is>>x; } return is; } template ostream &operator<<(ostream &os,const vector>&v){ int s=v.size(); for(int i=0;i ostream &operator<<(ostream &os,const vector>>&v){ int s=v.size(); for(int i=0;i>N>>K; { assert(1<=N && N<=25); assert(1<=K && K<=1000000000000000000ll); } vector M(4*N+1,vector(4*N+1)); ll d5=598946612;//1/5 for(int i=0;i<4*N;i++){ if(i%4==0){ M[i][i+1]=d5; M[i][0]=(d5*4)%mod; }else{ M[i][i+1]=d5; M[i][0]=(d5*3)%mod; M[i][1]=d5; } } auto matrix_multi = [](vector>&A,const vector>M)->void { int sz=A.size(); vector ans(sz,vector(sz)); for(int i=0;i(4*N+1)); for(int i=0;i<4*N+1;i++)ans[i][i]=1; while(K){ if(K&1){ matrix_multi(ans,M); } K>>=1; matrix_multi(M,M); } cout<