#include <bits/stdc++.h>
using namespace std;
long long b[2000005][3];
long long sm[2000005];
long long tb[2000005], inv[2000005], invtb[2000005];
void getA() {
  tb[0] = tb[1] = inv[0] = inv[1] = invtb[0] = invtb[1] = 1;
  for (long long i = 2; i <= 2000005 - 1; i++) {
    tb[i] = tb[i - 1] * i % 998244353;
    inv[i] = (998244353 - 998244353 / i) * inv[998244353 % i] % 998244353;
    invtb[i] = invtb[i - 1] * inv[i] % 998244353;
  }
}
int main() {
  ios::sync_with_stdio(false), cin.tie(0);
  long long n;
  cin >> n;
  getA();
  b[1][0] = 1;
  for (long long i = 2; i <= n; i++) {
    b[i][0] = i;
    b[i][2] = i - 2;
    b[i][1] =
        (i * i % 998244353 - i * 3 % 998244353 + 2 + 998244353) % 998244353;
  }
  for (int i = 1; i <= n; i++) {
    if (i == n) (sm[(n - i) * 2 + (i - 1)] += b[i][0]) %= 998244353;
    (sm[(n - i) * 2 + (i)] +=
     b[i][1] * tb[n] % 998244353 * invtb[i] % 998244353) %= 998244353;
    (sm[(n - i) * 2 + (i + 1)] +=
     b[i][2] * tb[n] % 998244353 * invtb[i] % 998244353) %= 998244353;
  }
  long long ans = 0;
  for (int i = 1; i < 2 * n; i++) {
    (ans += (i * 2 % 998244353 - n + 1 + 998244353) % 998244353 * n %
            998244353 * invtb[2] % 998244353 * sm[i] % 998244353) %= 998244353;
  }
  long long len = n * tb[n] % 998244353;
  cout << (len * (len + 1) % 998244353 * invtb[2] % 998244353 - ans +
           998244353) %
              998244353;
  return 0;
}
