func_code_string: #include <bits/stdc++.h>   using namespace std;   int n, a[1005];   long long dp[1005];   long long dpsum[1005];   bool b[1005];   long long ch[1005][1005];   long long gc(int c, int x) {     if (x == 0 || c == x) return 1;     if (!ch[c][x]) {       ch[c][x] = (gc(c - 1, x - 1) + gc(c - 1, x)) % 998244353;     }     return ch[c][x];   }   int getdp(int x) {     if (!b[x]) {       b[x] = 1;       if (a[x] > 0) {         for (int i = x + a[x] + 1; i <= n + 1; ++i) {           dp[x] =               (dp[x] + gc(i - x - 2, a[x] - 1) * (1LL + dpsum[i])) % 998244353;         }       }     }     return dp[x];   }   int main() {     cin >> n;     for (int i = 1; i <= n; ++i) {       cin >> a[i];     }     long long ans = 0;     for (int i = n; i >= 1; --i) {       dpsum[i] = dpsum[i + 1] + getdp(i);       dpsum[i] %= 998244353;     }     for (int i = 1; i <= n; ++i) {       ans = ans + getdp(i);       ans %= 998244353;     }     cout << ans;   }   