#include using namespace std; using ll=long long; #include #include using namespace atcoder; using mint=modint998244353; using namespace std; using namespace atcoder; using mint = modint998244353; struct S { mint a; int size; }; S op(S l, S r) { return S{l.a + r.a, l.size + r.size}; } S e() { return S{0, 0}; } S mapping(mint l, S r) { return S{r.a + r.size * l, r.size}; } mint composition(mint l, mint r) { return l+r;} mint id() { return 0; } int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); ll N,X; cin>>N>>X; vector A(N+1,X); for(int i=0;i>A[i+1]; vector next_n(N+1); ll p=N+1; for(int i=N;i>=0;i--){ next_n[i]=p; if(A[i]>1)p=i; } vector DP(N+1,0); vector V(N+2,S({0,1})); lazy_segtree seg(V); DP[0]=1; seg.set(0,{1,1}); for(ll i=0;i<=N;i++){ ll L=A[i]; mint g=seg.get(i).a; ll x=i; while(x<=N){ x=next_n[x]; if(x==N+1)break; if(L%A[x]!=0)break; L/=A[x]; } seg.apply(i+1,x+1,g); } cout<