#include using namespace std; //高速化 struct ponjuice{ponjuice(){cin.tie(0);ios::sync_with_stdio(0);cout<= 0; i--) #define per2(i, n) for(ll i = n-1; i >= 0; i--) #define per3(i, a, b) for(ll i = b-1; i >= a; i--) #define per4(i, a, b, step) for(ll i = b-1; i >= a; i-= step) #define per(...) overload4(__VA_ARGS__, per4, per3, per2, per1)(__VA_ARGS__) //関数 #define all(x) (x).begin(), (x).end() #define rall(x) (x).rbegin(), (x).rend() templateinline bool chmax(S& a, T b){return a < b && ( a = b , true);} templateinline bool chmin(S& a, T b){return a > b && ( a = b , true);} //定数 constexpr ll mod = 998244353; constexpr ll minf=-(1<<29); constexpr ll inf=(1<<29); constexpr ll MINF=-(1LL<<60); // constexpr ll INF=(1LL<<60); const int dx[4] ={-1, 0, 1, 0}; const int dy[4] ={ 0, 1, 0,-1}; const int dx8[8] ={-1,-1,-1, 0, 1, 1, 1, 0}; const int dy8[8] ={-1, 0, 1, 1, 1, 0,-1,-1}; void solve(); int main() { int t = 1; // cin >> t; while(t--)solve(); } #include using namespace atcoder; using S = __int128_t; S INF = (S)1'000'000'000'000'000'000'000'000'000'000'000'000; S op(S a, S b) { if(INF / a <= b) return INF; return a * b; } S e() {return 1;} void solve(){ int n; cin >> n; n++; vector a(n); rep(i,0,n) cin >> a[i]; segtree seg(n); rep(i,0,n) { seg.set(i, a[i]); } vector dp(n+2); dp[0] = 1; dp[1] = -1; rep(i,0,n) { ll r = seg.max_right(i+1, [&](S x) { return a[i] % x == 0; }); dp[r+1] = (dp[r+1] - dp[i]) % mod; dp[i+1] = (dp[i+1] + dp[i]*2) % mod; } cout << (dp[n]%mod+mod)%mod << endl; }