#include #include using namespace std; const long long MOD = 998244353LL; struct ModInt { long long x; ModInt(long long _x = 0) : x((_x % MOD + MOD) % MOD) {} ModInt operator+(const ModInt& other) const { return ModInt(x + other.x); } ModInt operator-(const ModInt& other) const { return ModInt(x - other.x); } ModInt operator*(const ModInt& other) const { return ModInt(x * other.x); } ModInt operator/(const ModInt& other) const { return *this * other.inv(); } ModInt pow(long long exp) const { if (exp == 0LL) return ModInt(1LL); ModInt a = pow(exp >> 1); a = a * a; if (exp & 1LL) return *this * a; return a; } ModInt inv() const { return pow(MOD - 2); } bool operator==(const ModInt& other) const { return x == other.x; } bool operator!=(const ModInt& other) const { return !(*this == other); } }; int main() { int n; cin >> n; const int facSize = 300000; vector fac(facSize); fac[0] = ModInt(1); for (int i = 1; i < facSize; ++i) { fac[i] = fac[i - 1] * ModInt(i); } auto helper = [&](int n, int m) -> ModInt { ModInt r = fac[n + m] / (fac[n - 2] * fac[m - 2] * ModInt(n) * ModInt(m) * ModInt(n + m - 1)); return r * r; }; ModInt ans(0); for (int k = 2; k <= n - 2; ++k) { ans = ans + helper(n - k, k); } cout << ans.x << endl; return 0; }