#include #include using namespace std; using i64=int64_t; template vector MiddleProd(vector f,vector g){ int N=f.size(),M=g.size(); assert(N>=M); reverse(g.begin(),g.end()); vector h=atcoder::convolution(f,g); vector res(N-M+1); for(int i=M-1;i vector MultiEvalGeomSeq(vector f,mint r,int M){ if(f.size()==0){ vector res(M); return res; } int N=f.size(); auto calc=[&](mint q,int K){ //q^Tr(i) を計算 vector res(K,1); mint nw=1; for(int i=1;i A=calc(r,N+M-1),B=calc(mint(1)/r,max(N,M)); for(int i=0;i vector AllInv(vector f){ int n=f.size(); vector res(n+1,1); for(int i=0;i=0;--i){ res[i]*=t; t*=f[i]; } return res; } void solve(){ constexpr i64 P=998244353,D=(1<<13)*119,E=(P-1)/D; using mint=atcoder::static_modint

; i64 A,N; cin>>A>>N; i64 L=N/D,R=N%D; auto h=[&](int n){ i64 m=n/E; vector g(m); mint t1=mint(A).pow(E*E),nw=1,cff=1; for(i64 i=0;i res(E); nw=1,cff=1; for(i64 i=0;i X=h(D),Y=h(R); mint ans=0,t2=mint(A).pow(2*D),t3=mint(A).pow(2*L*D),t4=1,t5=1; vector Z(E); for(i64 t=0;t>T; while(T--){ solve(); } }