#include #include #include using namespace atcoder; using mint=modint998244353; using namespace std; using ll=long long; using poly=vector; void add(poly &A,poly B){ if(A.size()> mul(vector> &A,vector> B){ ll N=A.size(); vector> R(N,vector(N,{0})); for(int i=0;i>N>>H; mint iv2=mint(2).inv(); mint iv3=mint(3).inv(); mint iv5=mint(5).inv(); vector> A={ {{iv2},{iv3},{0}}, {{0,iv2},{0,iv3},{0,iv3*2}}, {{0},{0,iv3},{0,iv3}} }; vector> E={ {{1},{0},{0}}, {{0},{1},{0}}, {{0},{0},{1}} }; N--; while(N>0){ if(N%2)E=mul(E,A); A=mul(A,A); N/=2; } poly AN={0}; vector T={{iv5*2},{0,iv5*2},{0,iv5}}; for(int i=0;i<3;i++){ for(int j=0;j<3;j++){ add(AN,convolution(T[j],E[i][j])); } } mint an=0; for(int h=H;h