#include <bits/stdc++.h>
#pragma GCC optimize(2)
using namespace std;
const int md = 998244353;
inline int read() {
  int x = 0, f = 1;
  char ch = getchar();
  for (; ch < '0' || ch > '9'; ch = getchar())
    if (ch == '-') f = -1;
  for (; ch >= '0' && ch <= '9'; ch = getchar())
    x = (x << 1) + (x << 3) + ch - '0';
  return x * f;
}
long long fac[1000010];
long long pw[1000010];
int main() {
  int n;
  cin >> n;
  fac[0] = 1;
  for (int i = 1; i <= n; ++i) fac[i] = fac[i - 1] * i % md;
  pw[n] = n;
  for (int i = n - 1; i; --i) pw[i] = (pw[i + 1] * i) % md;
  long long sum = 0;
  for (int i = 2; i <= n; ++i) sum = (sum + pw[i]) % md;
  cout << ((1LL * fac[n] * (n)-sum) % md + md) % md;
  return 0;
}
