#include <bits/stdc++.h>
using namespace std;
int const N = 1000000, md = 998244353;
int fc[N + 1], inv[N + 1], fcin[N + 1], an;
void ad(int &x, int y) {
  if ((x += y) >= md) x -= md;
}
int P(int n, int r) { return (long long)fc[n] * fcin[n - r] % md; }
int sm(int l, int r) { return (long long)(r - l + 1) * (r + l) / 2 % md; }
int main() {
  int n;
  scanf("%d", &n);
  fc[0] = 1;
  for (int i = 1; i < (int)(n + 1); ++i) fc[i] = (long long)fc[i - 1] * i % md;
  inv[1] = 1;
  for (int i = 2; i < (int)(n + 1); ++i)
    inv[i] = md - md / i * (long long)inv[md % i] % md;
  fcin[0] = 1;
  for (int i = 1; i < (int)(n + 1); ++i)
    fcin[i] = (long long)fcin[i - 1] * inv[i] % md;
  int m = (long long)fc[n] * n % md;
  an = sm(1, m - 2 * n + 1 + md);
  for (int i = 1; i < (int)(n + 1); ++i) ad(an, P(n, i));
  for (int i = 0; i < (int)(n - 2); ++i)
    ad(an, (long long)P(n, i) % md * (n - i - 1) % md *
               ((2ll * n * (2 * n - i - 3) - sm(i + 3, 2 * n - 1)) % md) % md);
  for (int i = 0; i < (int)(n - 2); ++i)
    ad(an, (long long)P(n, i) % md * (n - i - 1) % md *
               ((2ll * n * (i + 1) - sm(n + 1, n + 1 + i)) % md) % md);
  ad(an, n - 1);
  for (int i = 0; i < (int)(n - 1); ++i)
    ad(an, (long long)P(n, i) *
               (2 * n - i - 2 +
                (long long)(n - i - 2) * (2 * n - (n + i + 2)) % md) %
               md);
  for (int i = 1; i < (int)(n - 1); ++i)
    ad(an, (long long)P(n, i) * (fc[n - i] - 1) % md);
  printf("%d\n", an);
}
