#include <bits/stdc++.h>
using namespace std;
const long long MAX_N = 1e6 + 7, M = 998244353;
long long fact[MAX_N - 1], dp[MAX_N];
long long fast_pow(long long x, long long p) {
  if (p == 0) return 1;
  if (p == 1) return x % M;
  if (p % 2 == 0) {
    long long m = fast_pow(x, p / 2);
    return (m * m) % M;
  }
  long long m = fast_pow(x, p - 1);
  return (m * x) % M;
}
long long obr(long long x) { return fast_pow(x, M - 2); }
void init() {
  fact[0] = 1;
  for (long long i = 1; i < MAX_N; i++) {
    fact[i] = (i * fact[i - 1]) % M;
  }
}
long long c_n_k(long long n, long long k) {
  long long val = fact[n];
  val = (val * obr(fact[k])) % M;
  val = (val * obr(fact[n - k])) % M;
  return val;
}
long long extr(long long a, long long b) {
  a = (a - b) % M;
  while (a < 0) a += M;
  return a;
}
signed main() {
  init();
  long long n;
  cin >> n;
  for (long long i = 1; i <= n; i++) {
    dp[i] = (c_n_k(n, i) * fact[n - i]) % M;
  }
  dp[n + 1] = 0;
  for (long long i = 1; i <= n; i++) {
    dp[i] = extr(dp[i], dp[i + 1]);
  }
  long long summ = 0;
  for (long long i = 1; i <= n; i++) {
    summ = (summ + i * dp[i]) % M;
  }
  long long s2 = (fact[n] * n) % M;
  long long ans = (extr(s2, summ) + 1) % M;
  cout << ans << endl;
  return 0;
}
