#include #include #include #include #include using namespace std; using namespace atcoder; using mint = modint998244353; using ll = long long; const int MX = 200010; mint f[MX],inv[MX],fi[MX]; constexpr ll mod = 998244353; void solve(){ inv[1] = 1; for(int i=2;i> n; vector a(n + 1); for(i=0;i> a[i]; reverse(a.begin(),a.end()); // vector sum(n + 2); // for(i=1;i dp(n + 1); dp[0] = 1; // [l,r) auto rec = [&](int l,int r,auto &self){ if(r==l + 1) return; int mid = lower_bound(a.begin() + l,a.end(),(a[l] + a[r - 1])/2) - a.begin(); if(mid==r) mid--; if(mid==l) mid++; // cout << l << " " << mid << " " << r << endl; // assert(l<=mid); // assert(mid<=r); self(l,mid,self); const int b1 = a[l]; const int b2 = a[mid] - a[mid - 1]; vector ff(a[mid - 1] + 1 - b1),gg(a[r - 1] - a[l] + 1 - b2); for(i=l;i hh = convolution(ff,gg); for(i=mid;ia[i] - b1 - b2) dp[i] += hh[a[i] - b1 - b2]; } self(mid,r,self); }; rec(0,n + 1,rec); for(i=0;i<=n;i++) dp[i] *= f[a[i]]; mint ans = 0; for(i=1;i<=n;i++) ans += dp[i]; cout << ans.val() << "\n"; // deb // vector dp2(n + 1); // dp2[0] = 1; // for(i=1;i<=n;i++){ // for(int j=0;j