#include<bits/stdc++.h> #define N 1000010 usingnamespace std; typedeflonglong ll; const ll mod = 998244353;
template <typename T> inlinevoidread(T &x) { x = 0; T f = 1; char ch = getchar(); while (!isdigit(ch)) {if (ch == '-') f = -f; ch = getchar();} while (isdigit(ch)) {x = x * 10 + ch - 48; ch = getchar();} x *= f; }
ll n, a[N], tr[N], ans, fac[N], can[N];
ll lowbit(ll x){return x & -x;}
voidadd(ll x, ll val) { while (x <= n) { tr[x] += val; x += lowbit(x); } }
ll query(ll x) { ll res = 0; while (x) { res += tr[x]; x -= lowbit(x); } return res; }
voidpre() { fac[1] = fac[0] = 1; for (int i = 2; i <= n; i++) fac[i] = fac[i - 1] * i % mod; for (int i = n; i >= 1; i--) { can[i] = query(a[i]) * fac[n - i] % mod; add(a[i], 1); } }
intmain() { read(n); for (int i = 1; i <= n; i++) read(a[i]); pre(); for (int i = 1; i <= n; i++) ans = (ans + can[i]) % mod; printf("%lld", ans + 1); return0; }