#include using namespace std; using ll=long long; #define rep(i, n) for (int i = 0; i < (int)(n); i++) #define rrep(i, s, n) for (int i = (s); i < (int)(n); i++) template bool chmin(T& a, T b){if(a > b){a = b; return true;} return false;} template bool chmax(T& a, T b){if(a < b){a = b; return true;} return false;} const long long mod=998244353; const long long mod2=469762049; const long long mod100=1000000007; class MATH{ public: vectorfactorial;//階乗データ vectorfactorial_inv; void factorial_init(ll N,ll m){//階乗を入れる factorial.assign(N+1,0); factorial_inv.assign(N+1,0); ll p=1; factorial[0]=1; for(int i=1;i<=N;i++){ p=(p*i)%m; factorial[i]=p; } factorial_inv[N]=modinv(factorial[N],m); for(int i=N-1;i>=0;i--){ factorial_inv[i]=(factorial_inv[i+1]*(i+1))%m; } return; } ll power(ll a,ll b,ll m){//a^b a%=m; ll p=a,Answer=1; for(ll i=0;i<60;i++){ ll wari=(1LL<=1 && B>=1){ if(A>=B) A=(A%B); else B=(B%A); } if(A!=0) return A; return B; } ll modlog(ll a,ll b,ll m){//a^x=b(mod m)を満たす最小のx(ないなら-1) a%=m;b%=m; ll lo=-1,hi=m; while(hi-lo>1){ ll mid=(lo+hi)/2; if(mid*mid>=m) hi=mid; else lo=mid; } ll sqrtM=hi; mapbaby; ll amari=a; for(ll r=1;r=1) return q*sqrtM; else if(baby.count(amari)) return q*sqrtM+baby[amari]; amari=(amari*A)%m; } return -1; } }; MATH math; templatestruct Matrix{ int n,m; vector>table; Matrix(int N=0,int M=0):n(N),m(M){ table.assign(n+1,{}); for(int i=1;i<=n;i++) table[i].assign(m+1,0); } Matrix operator+(const Matrix&a){ assert(a.n==n); assert(a.m==m); Matrixres(a.n,a.m); for(int i=1;i<=a.n;i++){ for(int j=1;j<=a.m;j++){ res.table[i][j]=(a.table[i][j]+table[i][j]); } } return res; } Matrix operator-(const Matrix&a){ assert(a.n==n); assert(a.m==m); Matrixres(a.n,a.m); for(int i=1;i<=a.n;i++){ for(int j=1;j<=a.m;j++){ res.table[i][j]=(a.table[i][j]-table[i][j]); } } return res; } Matrix operator*(const Matrix&a){ assert(m==a.n); Matrixres(n,a.m); for(int i=1;i<=n;i++){ for(int j=1;j<=a.m;j++){ for(int k=1;k<=m;k++){ res.table[i][j]+=table[i][k]*a.table[k][j]%mod; res.table[i][j]%=mod; } } } return res; } }; templateMatrixpower(Matrixa,long long k){ assert(a.n==a.m); Matrixres(a.n,a.m); Matrixnow=a; for(int i=1;i<=a.n;i++) res.table[i][i]=1; for(int i=0;i<=60;i++){ if((k>>i)&1LL) res=res*now; now=now*now; } return res; } int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); int N; ll K; cin>>N>>K; math.factorial_init(100,mod); Matrixdat(N*4+1,N*4+1); for(int i=1;i<=N*4+1;i++){ if(i==N*4+1) continue; if(i%4==1){ dat.table[i][1]=math.modinv(5,mod)*4%mod; dat.table[i][i+1]=math.modinv(5,mod); continue; } dat.table[i][i+1]+=math.modinv(5,mod); dat.table[i][1]+=math.modinv(5,mod)*3%mod; dat.table[i][2]+=math.modinv(5,mod); } Matrixans(1,N*4+1); ans.table[1][1]=1; /*for(int i=1;i<=N*4+1;i++){ for(int j=1;j<=N*4+1;j++){ cout<