func_code_string: #include <bits/stdc++.h>   using namespace std;   long long val;   int visid;   const int mod = 1e9 + 7;   long long dp[60][10005];   long long Inv[100];   int vis[60][10005];   long long fp(long long b, long long p) {     if (p == 0) return 1;     long long tmp = fp(b, p / 2);     if (p % 2) return (((tmp * tmp) % mod) * b) % mod;     return (tmp * tmp) % mod;   }   long long solve(int cur, int k) {     if (k == 0) return fp(val, cur);     long long &ret = dp[cur][k];     if (vis[cur][k] == visid) return ret;     vis[cur][k] = visid;     ret = 0;     for (int i = 0; i <= cur; i++) {       ret += solve(i, k - 1) * Inv[cur + 1] % mod;       ret %= mod;     }     return ret;   }   long long n, ans = 1;   int k;   void go(long long x) {     int cnt = 0;     while (n % x == 0) {       cnt++;       n /= x;     }     visid++;     val = x;     ans *= solve(cnt, k);     ans %= mod;   }   int main() {     ios_base::sync_with_stdio(0);     cin.tie(0);     cout.tie(0);     for (int i = 0; i <= 60; i++) Inv[i] = fp(i, mod - 2);     cin >> n >> k;     long long x = 2;     while (x * x <= n) {       if (n % x == 0) go(x);       x++;     }     if (n != 1) go(n);     cout << ans << endl;     return 0;   }   