#include <atcoder/modint>
#include <bits/stdc++.h>
using namespace std;
using namespace atcoder;
using mint = modint998244353;
int solve(vector<long long> &a) {
int n = a.size();
long long int noOfOperations = 0;
// dp[i] is the number of black subsets of the first i elements such that
// the i-th element is necessarily painted black.
vector<mint> dp(n), offload(n);
dp[0] = 1;
for (int i = 0; i < n; i++) {
for (int j = i + a[i]; j < n; j += a[i]) {
noOfOperations++;
dp[j] += dp[i] + offload[i];
if (a[j] == a[i]) {
offload[j] += offload[i] + dp[i];
break;
}
}
}
mint ans = 0;
for (int i = 0; i < n; i++) {
ans += dp[i];
}
cout<<"No Of Operations: "<<noOfOperations<<endl;
return ans.val();
}
int main() {
const int n=200000;
vector<long long> a(n,1);
int R=447;
for(int i=0,nxt=R;i<n;i++){
if(i==nxt){
R-=1;
if(R==0)
break;
nxt=i+R;
}
a[i]=R;
}
cout << solve(a) << endl;
return 0;
}
I2luY2x1ZGUgPGF0Y29kZXIvbW9kaW50PgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp1c2luZyBuYW1lc3BhY2UgYXRjb2RlcjsKdXNpbmcgbWludCA9IG1vZGludDk5ODI0NDM1MzsKCmludCBzb2x2ZSh2ZWN0b3I8bG9uZyBsb25nPiAmYSkgewogICAgaW50IG4gPSBhLnNpemUoKTsKICAgIGxvbmcgbG9uZyBpbnQgbm9PZk9wZXJhdGlvbnMgPSAwOwogICAgLy8gZHBbaV0gaXMgdGhlIG51bWJlciBvZiBibGFjayBzdWJzZXRzIG9mIHRoZSBmaXJzdCBpIGVsZW1lbnRzIHN1Y2ggdGhhdAogICAgLy8gdGhlIGktdGggZWxlbWVudCBpcyBuZWNlc3NhcmlseSBwYWludGVkIGJsYWNrLgogICAgdmVjdG9yPG1pbnQ+IGRwKG4pLCBvZmZsb2FkKG4pOwogICAgZHBbMF0gPSAxOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICBmb3IgKGludCBqID0gaSArIGFbaV07IGogPCBuOyBqICs9IGFbaV0pIHsKICAgICAgICAgICAgbm9PZk9wZXJhdGlvbnMrKzsKICAgICAgICAgICAgZHBbal0gKz0gZHBbaV0gKyBvZmZsb2FkW2ldOwogICAgICAgICAgICBpZiAoYVtqXSA9PSBhW2ldKSB7CiAgICAgICAgICAgICAgICBvZmZsb2FkW2pdICs9IG9mZmxvYWRbaV0gKyBkcFtpXTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIG1pbnQgYW5zID0gMDsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CiAgICAgICAgYW5zICs9IGRwW2ldOwogICAgfQogICAgY291dDw8Ik5vIE9mIE9wZXJhdGlvbnM6ICI8PG5vT2ZPcGVyYXRpb25zPDxlbmRsOwogICAgcmV0dXJuIGFucy52YWwoKTsKfQoKaW50IG1haW4oKSB7CiAgICBjb25zdCBpbnQgbj0yMDAwMDA7CiAgICB2ZWN0b3I8bG9uZyBsb25nPiBhKG4sMSk7CiAgICBpbnQgUj00NDc7CiAgICBmb3IoaW50IGk9MCxueHQ9UjtpPG47aSsrKXsKICAgICAgICBpZihpPT1ueHQpewogICAgICAgICAgICBSLT0xOwogICAgICAgICAgICBpZihSPT0wKQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIG54dD1pK1I7CiAgICAgICAgfQogICAgICAgIGFbaV09UjsKICAgIH0KICAgIGNvdXQgPDwgc29sdmUoYSkgPDwgZW5kbDsKICAgIHJldHVybiAwOwp9