#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using ll = long long; #define el '\n' #define rep(i,n) for(int i=0;i struct modint{ ll x; modint(ll v=0){x=v%MOD;if(x<0)x+=MOD;} modint operator+(const modint&a)const{return modint(x+a.x);} modint operator-(const modint&a)const{return modint(x-a.x);} modint operator*(const modint&a)const{return modint(x*a.x);} modint& operator*=(const modint&a){x=x*a.x%MOD;return *this;} modint& operator+=(const modint&a){if((x+=a.x)>=MOD)x-=MOD;return *this;} modint& operator-=(const modint&a){x-=a.x;if(x<0)x+=MOD;return *this;} modint pow(ll n)const{modint res=1;modint a = *this;while(n){if(n&1)res=res*a;a=a*a;n>>=1;}return res;} modint inv()const{return pow(MOD-2);} modint operator/(const modint &a)const{return *this*a.inv();} modint& operator/=(const modint &a){return *this*=a.inv();} bool operator==(const modint&a)const{return x==a.x;} bool operator!=(const modint&a)const{return x!=a.x;} ll val()const{return x;} }; using mint=modint<998244353>; struct sieve{ vector f;vector primes; sieve(ll n=2){f.resize(n+1,0);f[0]=f[1]=-1; for(ll i=2;i<=n;i++){if(f[i])continue;primes.push_back(i);f[i]=i; for(ll j=i*i;j<=n;j+=i){if(f[j])continue;f[j]=i;}}} bool is_prime(ll x){return f[x]==x;} vector prime_factors(int x){vector vec; while(x!=1){vec.push_back(f[x]);x/=f[x];}return vec;} vector> prime_factorize(ll x){vector> vec; for(ll i=0;i divisors(ll x){vector res; for(ll i=1;i*i<=x;i++){if(x%i==0){res.push_back(i);if(i*i!=x)res.push_back(x/i);}} sort(res.begin(),res.end());return res;} }; int main(){ ll N;cin >> N; sieve p(1000006); auto prime = p.primes; if(N==1){ cout << 1 <