#include <bits/stdc++.h>
using namespace std;
const int MOD = 1'000'000'007;
int addmod(int a, int b) { a += b; if (a >= MOD) a -= MOD; return a; }
int submod(int a, int b) { a -= b; if (a < 0)  a += MOD; return a; }
int mulmod(long long a, long long b) { return int((a * b) % MOD); }
int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int N;
    cin >> N;
    vector<int> d(N + 2), x(N + 2);
    for (int i = 1; i <= N; ++i) cin >> d[i] >> x[i];
    const int B = int(sqrt(N) + 1);                       
    vector<vector<vector<int>>> pref(B + 1);
    for (int dd = 1; dd <= B; ++dd) {
        pref[dd].resize(dd);
        for (int r = 0; r < dd; ++r) pref[dd][r].push_back(0);
    }
    vector<int> ways(N + 2, 1);    
    for (int i = N; i >= 1; --i) {
        int sum = 0;
        if (d[i] == 0) {
            ways[i] = 1;
        } else if (d[i] <= B) {
            int dd = d[i];
            int r  = i % dd;
            auto &v = pref[dd][r];
            long long cnt = (long long)v.size() - 1; 
            long long k   = min<long long>(x[i], cnt);
            sum = v[k];                      
            ways[i] = addmod(1, sum);
        } else {
            long long cur = i + d[i];
            long long taken = 0;
            while (cur <= N && taken < x[i]) {
                sum = addmod(sum, ways[cur]);
                cur += d[i];
                ++taken;
            }
            ways[i] = addmod(1, sum);
        } 
        for (int dd = 1; dd <= B; ++dd) {
            int r = i % dd;
            auto &v = pref[dd][r];
            v.push_back(addmod(v.back(), ways[i]));
        }
    }
    int answer = 0;
    for (int i = 1; i <= N; ++i) answer = addmod(answer, ways[i]);
    cout << answer << '\n';
    return 0;
}
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |