#include <bits/stdc++.h>
using namespace std;
#ifdef LOCAL
#include "debug.h"
#else
#define dbg(...) 47
#endif
constexpr int B = 400;
constexpr int mod = 1e9 + 7;
void add(int &a, int b) {
if ((a += b) >= mod) a -= mod;
}
void sub(int &a, int b) {
if ((a -= b) < 0) a += mod;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
vector<int> d(n), c(n);
for (int i = 0; i < n; i++) {
cin >> d[i] >> c[i];
}
map<int64_t, vector<int>> g;
for (int i = 0; i < n; i++) {
int64_t f = int64_t(c[i]) * d[i] + i;
g[f].push_back(i);
}
vector<int> dp(n);
vector<vector<int>> s(B, vector<int>(B));
dp[0] = 1;
for (int i = 0; i < n; i++) {
for (int j = 1; j < B; j++) {
add(dp[i], s[j][i % j]);
}
for (auto j : g[i]) {
if (d[j] > 0 && d[j] < B) {
sub(s[d[j]][i % d[j]], dp[j]);
}
}
if (d[i] == 0) {
continue;
}
if (d[i] >= B) {
for (int j = 1; j <= c[i] && i + j * d[i] < n; j++) {
add(dp[i + j * d[i]], dp[i]);
}
} else {
add(s[d[i]][i % d[i]], dp[i]);
}
}
int ans = 0;
for (int i = 0; i < n; i++) {
add(ans, dp[i]);
}
cout << ans << '\n';
return 0;
}