#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e6 + 5, lg = 21;
const long long int md = 1e9 + 7;
int d[MAXN];
long long int dp[MAXN][lg];
bool pr[MAXN];
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  pr[1] = pr[0] = true;
  for (int i = 2; i < MAXN; i++) {
    if (pr[i]) continue;
    d[i] = i;
    for (int j = 2 * i; j < MAXN; j += i) pr[j] = true, d[j] = i;
  }
  for (int i = 0; i < MAXN; i++) dp[i][0] = 1ll;
  for (int i = 1; i < lg; i++) dp[0][i] = 2ll;
  for (int i = 1; i < MAXN; i++)
    for (int j = 1; j < lg; j++) dp[i][j] = (dp[i - 1][j] + dp[i][j - 1]) % md;
  int q;
  cin >> q;
  while (q--) {
    int n, r;
    cin >> r >> n;
    long long int ans = 1ll;
    while (n > 1) {
      int cnt = 0, n2 = n;
      while (n2 > 1 && (n2 % d[n]) == 0) n2 /= d[n], cnt++;
      n = n2;
      ans = (ans * dp[r][cnt]) % md;
    }
    cout << ans << '\n';
  }
  return 0;
}
