#include using namespace std; #include using namespace atcoder; using mint=atcoder::modint998244353; #define int long long struct FastFactrize{ vector SPF; FastFactrize(int N):SPF(N+1,1){ for(int i=2;i<=N;i++){ if(SPF[i]!=1)continue; for(int j=i;j<=N;j+=i){ if(SPF[j]==1)SPF[j]=i; } } }; vector factrize_vector(int n){ vector ret; while(SPF[n]!=1){ ret.push_back(SPF[n]); n/=SPF[n]; } return ret; } vector factrize_set(int n){ vector ret=factrize_vector(n); ret.erase(unique(ret.begin(),ret.end())); return ret; } map factrize_map(int n){ map ret; while(SPF[n]!=1){ ret[SPF[n]]++; n/=SPF[n]; } return ret; } vector factor(int n){ vector ret={1}; for(auto[i,j]:factrize_map(n)){ vector nret; for(int e:ret){ int x=1; for(int e2=0;e2<=j;e2++){ nret.push_back(e*x); x*=i; } } swap(ret,nret); } return ret; } }; mint op(mint a,mint b){return a*b;} mint e(){return 1;} signed main(){ int n;cin>>n; vector cnt(n+1); FastFactrize f(n); for(int i=1;i<=n;i++){ for(auto&&e:f.factrize_vector(i)){ cnt[e]++; } } vector v; for(auto&&e:cnt){ if(e)v.push_back(e); } segtree seg(v.size()); vector> t; for(int i=0;i