#include <bits/stdc++.h>
using namespace std;
vector<bool> isprime(1000005, true);
vector<long long> spf(1000005, 0);
vector<long long> prime;
void sieve() {
  isprime[0] = isprime[1] = false;
  for (long long i = 2; i < 1000005; i++) {
    if (isprime[i]) {
      for (long long j = 2 * i; j < 1000005; j += i) {
        isprime[j] = false;
        if (spf[j] == 0) {
          spf[j] = i;
        }
      }
      prime.push_back(i);
    }
  }
}
long long power(long long k, long long n, long long m = 1000000007) {
  long long res = 1;
  while (n) {
    if (n % 2 != 0) {
      res = (res * k) % m;
    }
    k = (k * k) % m;
    n = n / 2;
  }
  return (res);
}
void READ(vector<long long> &v, long long n) {
  long long a;
  for (long long i = 0; i < n; i = i + 1) {
    cin >> a;
    v.push_back(a);
  }
}
void PRINT(vector<long long> &v, long long a = 0) {
  for (long long i = a; i < v.size(); i = i + 1) {
    cout << v[i] << " ";
  }
  cout << "\n";
}
long long n, m, k;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  std::cout.unsetf(std::ios::floatfield);
  std::cout.precision(12);
  long long a, b, c, d, e, x, i, j, t, y, z, x1, y1, z1, f;
  double p, q, r, u, w;
  string str, str1, str2, str4;
  cin >> n;
  vector<long long> fact(n + 2, 1);
  for (i = 2; i < n + 1; i++) {
    fact[i] = (fact[i - 1] % 998244353 * i % 998244353) % 998244353;
  }
  vector<long long> dp(n + 2, 1);
  for (i = 2; i < n + 1; i++) {
    dp[i] = (dp[i - 1] % 998244353 * i % 998244353 + fact[i] % 998244353 - i +
             998244353) %
            998244353;
  }
  cout << dp[n];
}
