import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.NoSuchElementException; public class Main implements Runnable { public static void main(String[] args) { new Thread(null, new Main(), "", 512 * 1024 * 1024).start(); } final long mod=998244353; long pow(long a, long n) { if(n==0)return 1; return pow(a*a%mod,n/2)*(n%2==1?a:1)%mod; } long inv(long a) { return pow(a,mod-2); } long i2=inv(2); long solve(long N, long A) { if(A==1)return N%mod*(N-1)%mod*i2%mod; long b=1; int e=0; while(b*A<=N) { b*=A; ++e; } long[] x=new long[e+10]; long[] power=new long[e+10]; long[] res=new long[e+10]; x[0]=N; power[0]=1; for(int i=1;i0) { ans+=d*(d+1)%mod*i2%mod; ans%=mod; ans+=d*(x[i]-power[e-i])%mod; ans%=mod; ans+=d*(i+res[i])%mod; ans%=mod; } } //A^{e-i} <= z <= [N/A^i] < A^{e-(i-1)} ans+=(x[i]-power[e-i])%mod*(x[i]-power[e-i]+1)%mod*i2%mod; ans+=(i+res[i])*(x[i]-power[e-i]+1)%mod; ans%=mod; } return (ans+mod)%mod; } public void run() { FastScanner sc=new FastScanner(); PrintWriter pw=new PrintWriter(System.out); int T=sc.nextInt(); for(int t=0;t Integer.MAX_VALUE) throw new NumberFormatException(); return (int) nl; } public double nextDouble() { return Double.parseDouble(next());} }