func_code_string: #include <bits/stdc++.h>   const int inf = 1e9;   const double eps = 1e-9;   const int mod = 1e9 + 7;   using namespace std;   int mypow(int x, int y) {     int res = 1;     for (; y >= 1; y >>= 1) {       if (y & 1) res = (1ll * res * x) % mod;       x = (1ll * x * x) % mod;     }     return res;   }   int32_t main() {     long long n;     int k;     cin >> n >> k;     vector<long long> p;     vector<int> al;     long long x = n;     for (long long i = 2; i * i <= x; ++i) {       if (!(x % i)) {         p.push_back(i);         al.push_back(0);       }       int c = 0;       while (!(x % i)) {         al[al.size() - 1]++;         x /= i;       }     }     if (x != 1) {       p.push_back(x);       al.push_back(1);     }     int ans = 1;     for (int o = 0; o < p.size(); ++o) {       vector<vector<int>> dp(k + 1, vector<int>(al[o] + 1, 0));       dp[0][al[o]] = 1;       for (int i = 1; i <= k; ++i) {         for (int j = 0; j <= al[o]; ++j) {           int s = (1ll * dp[i - 1][j] * mypow(j + 1, mod - 2)) % mod;           for (int h = 0; h <= j; ++h) {             dp[i][h] = (dp[i][h] + s) % mod;           }         }       }       int l = 0;       int r = 1;       for (int j = 0; j <= al[o]; ++j) {         l = (l + (1ll * dp[k][j] * r) % mod) % mod;         r = (1ll * r * (p[o] % mod)) % mod;       }       ans = (1ll * ans * l) % mod;     }     cout << ans;     return 0;   }   