Problem: Bash got tired on his journey to become the greatest Pokemon master. So he decides to take a break and play with functions.

Bash defines a function f0(n), which denotes the number of ways of factoring n into two factors p and q such that gcd(p, q) = 1. In other words, f0(n) is the number of ordered pairs of positive integers (p, q) such that p·q = n and gcd(p, q) = 1.

But Bash felt that it was too easy to calculate this function. So he defined a series of functions, where fr + 1 is defined as:

<image>

Where (u, v) is any ordered pair of positive integers, they need not to be co-prime.

Now Bash wants to know the value of fr(n) for different r and n. Since the value could be huge, he would like to know the value modulo 109 + 7. Help him!

Input

The first line contains an integer q (1 ≤ q ≤ 106) — the number of values Bash wants to know.

Each of the next q lines contain two integers r and n (0 ≤ r ≤ 106, 1 ≤ n ≤ 106), which denote Bash wants to know the value fr(n).

Output

Print q integers. For each pair of r and n given, print fr(n) modulo 109 + 7 on a separate line.

Example

Input

5
0 30
1 25
3 65
2 5
4 48


Output

8
5
25
4
630

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1000000007;
int ct_primes = 168;
int primes[] = {2,   3,   5,   7,   11,  13,  17,  19,  23,  29,  31,  37,  41,
                43,  47,  53,  59,  61,  67,  71,  73,  79,  83,  89,  97,  101,
                103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167,
                173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239,
                241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313,
                317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397,
                401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467,
                479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569,
                571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643,
                647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733,
                739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823,
                827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
                919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997};
long long bin[20][1000005];
int q;
int r, n;
int main() {
  iostream::sync_with_stdio(0);
  cin.tie(0);
  bin[0][0] = 1;
  for (int i = 1; i <= 1000000; i++) bin[0][i] = 1;
  for (int i = 1; i < 20; i++) {
    bin[i][0] = 2;
    for (int j = 1; j <= 1000000; j++)
      bin[i][j] = (bin[i - 1][j] + bin[i][j - 1]) % MOD;
  }
  cin >> q;
  while (q--) {
    cin >> r >> n;
    vector<int> exp;
    for (int i = 0; i < ct_primes; i++) {
      int p = primes[i];
      if (p * p > n) break;
      if (n % p == 0) {
        int ct = 0;
        while (n % p == 0) {
          n /= p;
          ct++;
        }
        exp.push_back(ct);
      }
    }
    if (n != 1) exp.push_back(1);
    long long ret = 1;
    if (r == 0) {
      for (int i = 0; i < exp.size(); i++) ret = (2 * ret) % MOD;
    } else {
      for (int i = 0; i < exp.size(); i++) ret = (ret * bin[exp[i]][r]) % MOD;
    }
    cout << ret << "\n";
  }
  return 0;
}