func_code_string: #include <bits/stdc++.h>   using namespace std;   string dst__;   stringstream dss__;   void debug(stringstream& ds) {     cerr << endl;     return;   }   template <typename F, typename... R>   void debug(stringstream& ds, const F& f, const R&... r) {     string n;     ds >> n;     cerr << n <<  =  << f <<    ;     debug(ds, r...);   }   constexpr long long LINF = 334ll << 53;   constexpr int INF = 15 << 26;   constexpr long long MOD = 1E9 + 7;   void sieve(long long n, vector<long long>& p) {     vector<char> isprime(n + 1, 1);     isprime[0] = isprime[1] = 0;     for (long long i = 2; i <= n; i++) {       if (isprime[i]) {         p.push_back(i);         for (long long j = i * i; j <= n; j += i) isprime[j] = 0;       }     }   }   vector<long long> primes;   vector<vector<long long>> dp(22, vector<long long>(1000010));   long long r, c;   long long primeFactor(long long k) {     vector<pair<long long, int>> ret;     for (int i = 0;; ++i) {       if (primes[i] * primes[i] > k) {         if (k != 1ll) ret.push_back(make_pair(k, 1));         break;       }       if (k % primes[i] == 0) {         ret.push_back(make_pair(primes[i], 0));         while (k % primes[i] == 0) {           k /= primes[i];           ret.back().second++;         }       }     }     long long ans = 1;     for (auto& y : ret) {       ans = ans * dp[y.second][r] % MOD;     }     return ans;   }   int main() {     sieve(1000003, primes);     for (int i = 1; i < 22; ++i) {       dp[i][0] = 2;       if (i == 1) {         for (int j = 1; j < 1000010; ++j) {           dp[i][j] = j + 2;         }       } else {         for (int j = 1; j < 1000010; ++j) {           dp[i][j] = dp[i - 1][j] + dp[i][j - 1] % MOD;         }       }     }     int n;     cin >> n;     for (int i = 0; i < n; ++i) {       scanf( %lld%lld , &r, &c);       auto ans = primeFactor(c);       printf( %lld n , ans);     }     return 0;   }   