#include #include using namespace std; const int MAXN=2e5+100,mod=998244353; int n; int a[MAXN]; long long fac[MAXN],ans,inv[MAXN],facinv[MAXN]; map mp; long long A(int n, int m) { if(n> n; fac[0]=1,inv[1]=1,facinv[0]=1; for (int i=1; i<=n; i++) { fac[i]=fac[i-1]*i%mod; if (i>1) inv[i]=inv[mod%i]*(mod-mod/i)%mod; facinv[i]=facinv[i-1]*inv[i]%mod; cin >> a[i]; mp[a[i]]++; } vector s; for (int i=1; i<=n; i++) { if (!mp[i]) { s.push_back(i); } } int cnt=s.size(),max1=0,c=0; for (int i=1; i<=n; i++) { max1=max(max1,a[i]); if (a[i]!=-1) { if (a[i]==max1) { int o=lower_bound(s.begin(),s.end(),a[i])-s.begin(); (ans+=A(o,c)*fac[cnt-c])%=mod; } } else { int o=lower_bound(s.begin(),s.end(),max1)-s.begin(); c++; (ans+=(A(cnt,c)-A(o,c)+mod)%mod*inv[c]%mod*fac[cnt-c])%=mod; } } cout << ans; return 0; }