是哪寄了捏
#include <bits/stdc++.h>
using namespace std;
const long long p=998244353;
inline long long read() {
long long x;bool f;char ch;
for(f=0;!isdigit(ch=getchar());f=ch=='-');
for(x=ch-48;isdigit(ch=getchar());x=x*10+ch-48);
return f?-x:x;
}
inline void print(long long x,char las) {
if(!x) {
putchar(48),putchar(las);
return ;
}
if(x<0) putchar('-'),x=-x;
int ls[20],k=0;
while(x) ls[++k]=x%10,x/=10;
while(k) putchar(ls[k--]+48);
putchar(las);
return ;
}
long long xz=1;
inline long long inv(long long x) {
int b=p-2;long long res=1;
while(b) {
if(b&1) res*=x,res%=p;
x*=x;x%=p;
b>>=1;
}
return res;
}
int n=read();
inline long long ktzk(int *k) {
long long ls[xz+1]={},jc=1,res=0;
for(int i=1;i<=n;i++) {
jc*=i;jc%=p;
int now=i;
while(now<=xz) ls[now]++,now+=now&-now;
}
// for(int i=1;i<=xz;i++) print(ls[i],'\n');
for(int i=1;i<n;i++) {
jc*=inv(n-i+1);jc%=p;
long long now=k[i]-1,p=0;
while(now) p+=ls[now],now-=now&-now;
// cout<<p<<' '<<jc<<'\n';
res+=jc*p;
now=k[i];
while(now<=xz) ls[now]--,now+=now&-now;
}
return res;
}
int a[1000001];
int main() {
// cout<<6*inv(3)%p;
for(int i=1;i<=n;i++) a[i]=read();
while(xz<n) xz<<=1;
// cout<<xz<<'\n';
print(ktzk(a)+1,'\n');
return 0;
}