#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
const int N = 2e5 + 5;
const int C = 447;
const int MOD = 998244353;
void add(int& a, int b) {
a += b;
if (a >= MOD) a -= MOD;
}
int n;
int a[N];
int dp[N]; // dp[i] = Số tập hợp khác nhau được tô màu đen nếu ô đầu tiên được tô là ô i
int sum[C + 5][C + 5]; // sum[val][r] = tổng các dp[i] sao cho i đồng dư với r (mod val)
int main() {
ios::sync_with_stdio(0); cin.tie(0);
cin >> n;
for (int i = 1; i <= n; i++) cin >> a[i];
for (int i = n; i >= 1; i--) { // O(n * sqrt(n))
dp[i] = 1;
if (a[i] >= C) {
for (int x = 1; i + a[i] * x <= n; x++) { // O(sqrt(n))
add(dp[i], dp[i + a[i] * x]);
}
}
else {
// i + a[i] * x = j
// <=> j đồng dư với i (mod a[i])
// <=> j đồng dư với i % a[i] (mod a[i])
add(dp[i], sum[a[i]][i % a[i]]);
}
for (int val = 1; val < C; val++) { // O(sqrt(n))
add(sum[val][i % val], dp[i]);
}
}
cout << dp[1] << '\n';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAp1c2luZyBuYW1lc3BhY2Ugc3RkOyAgCgp0eXBlZGVmIGxvbmcgbG9uZyBsbDsgIAp0eXBlZGVmIHBhaXI8aW50LCBpbnQ+IGlpOyAgCgpjb25zdCBpbnQgSU5GID0gMWU5OyAgCmNvbnN0IGxsIExJTkYgPSAxZTE4OyAgCgpjb25zdCBpbnQgTiA9IDJlNSArIDU7CmNvbnN0IGludCBDID0gNDQ3OyAKY29uc3QgaW50IE1PRCA9IDk5ODI0NDM1MzsgCgp2b2lkIGFkZChpbnQmIGEsIGludCBiKSB7CglhICs9IGI7IAoJaWYgKGEgPj0gTU9EKSBhIC09IE1PRDsgCn0KCmludCBuOyAgCmludCBhW05dOyAKaW50IGRwW05dOyAvLyBkcFtpXSA9IFPhu5EgdOG6rXAgaOG7o3Aga2jDoWMgbmhhdSDEkcaw4bujYyB0w7QgbcOgdSDEkWVuIG7hur91IMO0IMSR4bqndSB0acOqbiDEkcaw4bujYyB0w7QgbMOgIMO0IGkgCmludCBzdW1bQyArIDVdW0MgKyA1XTsgLy8gc3VtW3ZhbF1bcl0gPSB04buVbmcgY8OhYyBkcFtpXSBzYW8gY2hvIGkgxJHhu5NuZyBkxrAgduG7m2kgciAobW9kIHZhbCkKCmludCBtYWluKCkgewoJaW9zOjpzeW5jX3dpdGhfc3RkaW8oMCk7IGNpbi50aWUoMCk7ICAJCgljaW4gPj4gbjsgCglmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIGNpbiA+PiBhW2ldOyAgCgoJZm9yIChpbnQgaSA9IG47IGkgPj0gMTsgaS0tKSB7IC8vIE8obiAqIHNxcnQobikpCgkJZHBbaV0gPSAxOyAgIAoJCQoJCWlmIChhW2ldID49IEMpIHsKCQkJZm9yIChpbnQgeCA9IDE7IGkgKyBhW2ldICogeCA8PSBuOyB4KyspIHsgLy8gTyhzcXJ0KG4pKQoJCQkJYWRkKGRwW2ldLCBkcFtpICsgYVtpXSAqIHhdKTsgCgkJCX0KCQl9CgkJZWxzZSB7CgkJCS8vICAgICAgaSArIGFbaV0gKiB4ID0gaiAKCQkJLy8gPD0+ICBqIMSR4buTbmcgZMawIHbhu5tpIGkgKG1vZCBhW2ldKQoJCQkvLyA8PT4gIGogxJHhu5NuZyBkxrAgduG7m2kgaSAlIGFbaV0gKG1vZCBhW2ldKSAKCQkJYWRkKGRwW2ldLCBzdW1bYVtpXV1baSAlIGFbaV1dKTsgCgkJfQoJCQoJCWZvciAoaW50IHZhbCA9IDE7IHZhbCA8IEM7IHZhbCsrKSB7IC8vIE8oc3FydChuKSkKCQkJYWRkKHN1bVt2YWxdW2kgJSB2YWxdLCBkcFtpXSk7CQoJCX0KCX0KCgljb3V0IDw8IGRwWzFdIDw8ICdcbic7IAp9