#include<bits/stdc++.h>//序列类dp问题,找到序列所满足的条件进行转移 using namespace std; typedef long long ll; ll MOD=998244353; ll C[1010][1010]; ll dp[1010]; ll a[1010]; void init() { for(int i=0;i<=1000;i++) { C[i][0]=C[i][i]=1; for(int j=1;j<i;j++) C[i][j]=(C[i-1][j]+C[i-1][j-1])%MOD; } } int main() { int n; scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%lld",&a[i]); init(); ll ans=0; dp[n+1]=1; for(int i=n-1;i>=1;i--) { if(a[i]<=0||a[i]>n-i) continue; for(int j=i+a[i]+1;j<=n+1;j++) { dp[i]+=C[j-i-1][a[i]]*dp[j]; dp[i]%=MOD; } } for(int i=1;i<=n-1;i++) { ans+=dp[i]; ans%=MOD; } printf("%lld ",ans); }