rt
#include <iostream>
#include <vector>
using namespace std;
const int MOD = 998244353;
long long fast_pow(long long base, long long exp, int mod) {
long long result = 1;
while (exp > 0) {
if (exp % 2 == 1) {
result = (result * base) % mod;
}
base = (base * base) % mod;
exp /= 2;
}
return result;
}
int main() {
int n;
cin >> n;
vector<long long> dp(n + 1, 1);
for (int j = 1; j <= n; ++j) {
for (int k = 1; k <= j; ++k) {
dp[j] = (dp[j] * fast_pow(k, k, MOD)) % MOD;
}
}
long long ans = 1;
for (int i = 1; i <= n; ++i) {
long long curr_prod = 1;
for (int j = 1; j <= i; ++j) {
curr_prod = (curr_prod * dp[j]) % MOD;
}
ans = (ans * curr_prod) % MOD;
}
cout << ans << endl;
return 0;
}