// yuki 1529 Constant Lcm // 2021.8.15 #include typedef long long ll; const int mod = 998244353; #define MAX 1000005 int a[MAX]; char cn[MAX]; int f[MAX][8], p[MAX][8], hi[MAX]; ll ans = 1; void mktbl(int ma) { int i, j, k, m; for (j = 2; j <= ma; j+=2) { i = j, k = 0; while (!(i & 1)) k++, i >>= 1; f[j][hi[j]] = 2, p[j][hi[j]++] = k; } for (m = 3; m <= ma; m += 2) if (!cn[m]) { f[m][hi[m]] = m, p[m][hi[m]++] = 1; for (j = m << 1; j <= ma; j += m) { cn[j] = 1; i = j, k = 0; while (i % m == 0) i /= m, k++; f[j][hi[j]] = m, p[j][hi[j]++] = k; } } } int pow_mod(int x, int p) { int r = 1; while (p) { if (p & 1) r = (ll)r * x % mod; x = (ll)x * x % mod; p >>= 1; } return r; } inline static void mul_pow(int a) { ans = ans * a % mod; } inline static void chmax(int *a, int b) { if (*a < b) *a = b; } void reg(int x, int y) { int i = 0, j = 0; while (i < hi[x] && j < hi[y]) { if (f[x][i] < f[y][j]) chmax(a+f[x][i], p[x][i]), ++i; else if (f[x][i] > f[y][j]) chmax(a+f[y][j], p[y][j]), ++j; else chmax(a+f[x][i], p[x][i]+p[y][j]), ++i, ++j; } while (i < hi[x]) chmax(a+f[x][i], p[x][i]), ++i; while (j < hi[y]) chmax(a+f[y][j], p[y][j]), ++j; } int main() { int N, i, j; scanf("%d", &N); mktbl(N-1); /* for (i = 2; i <= 40; ++i) { printf("[%d] sz=%d: ", i, hi[i]); for (j = 0; j < hi[i]; ++j) printf("(%d,%d) ", f[i][j],p[i][j]); printf("\n"); } */ for (i = 1, j = N-1; i <= j; ++i, --j) reg(i, j); if (a[2]) mul_pow(pow_mod(2, a[2])); for (i = 3; i < N; i+=2) if (a[i]) mul_pow(pow_mod(i, a[i])); printf("%d\n", (int)ans); return 0; }