#include using namespace std; typedef long long ll; typedef pair p_ll; template void debug(T itr1, T itr2) { auto now = itr1; while(now=0; i--) #define popcount __builtin_popcount const ll LLINF = pow(2,61)-1; const ll INF = pow(2,30)-1; const ll MOD = 998244353; ll inv(ll a, ll m=MOD) { ll b = m, x = 1, y = 0; while (b!=0) { int d = a/b; a -= b*d; swap(a,b); x -= y*d; swap(x,y); } return (x+m)%m; } ll gcd(ll a, ll b) { if (a isp; void sieve(int x=pow(10,6)+10) { isp.resize(x,true); isp[0] = false; isp[1] = false; for (int i=2; pow(i,2)<=x; i++) { if (isp[i]) for(int j=2; i*j<=x; j++) isp[i*j] = false; } } // ---------------------------------------------------------------------- // ---------------------------------------------------------------------- int main() { sieve(); ll N; cin >> N; ll result = 1; rep(i,N) { if (isp[i]) { ll ti = N; if (ti%i==0) { while (ti%i==0) { ti /= i; result = result*(i*i%MOD)%MOD; } if (i==2&&ti==1) result = result*inv(4)%MOD; } while (ti>=i) { ti /= i; result = result*i%MOD; } // cout << i << "->" << result << endl; } } cout << result << endl; return 0; }