#include <iostream>
#include <vector>
#include <algorithm> // __gcd()
#include <cstring> // memset()
#include <cassert> // assert()
using namespace std;
#define int long long
typedef long double dbl;
const int N=2e6+10;
int np, prime[N];
bool isp[N];
void sieve(int N) {
memset(isp, true, sizeof isp);
isp[0] = isp[1] = false;
for(int i=2; i<N; i++) if(isp[i]) {
prime[++np]=i;
for(int j=2*i; j<N; j+=i) {
isp[j]=false;
}
}
}
inline int mul(int a, int b, int m) {
a%=m; if(a<0) a+=m;
b%=m; if(b<0) b+=m;
int q = ((dbl)a * (dbl)b) / (dbl)m;
int r = a*b - q*m;
return (r<0 ? r+m:r);
}
inline int pwr(int a, int n, int m) {
int ans(1);
while(n) {
if(n & 1) ans = mul(ans, a, m);
if(n >>= 1) a = mul(a, a, m);
}
return ans%m;
}
int myrand(int n) {
return rand()%n*rand()%n*rand()%n;
}
bool ispmiller(int p) { // O(30*logp)
if(p<2) return false;
if(p==2) return true;
if(p%2==0) return false;
int s=p-1; s>>=__builtin_ctzll(s);
for(int i=0; i<60; i++) {
int val=pwr(myrand(p-1)+1,s,p), temp=s;
while(temp!=p-1 and 1<val and val<p-1) {
val=mul(val,val,p);
temp<<=1;
}
if(val!=p-1 and temp%2==0) return false;
}
return true;
}
inline int pollardrho(int n) { // O(n^0.25)
if(n==1) return 1;
if(n%2==0) return 2;
int c=myrand(n-1)+1, x=myrand(n-2)+2, y=x;
int d=1; while(d==1) {
x=mul(x,x,n)+c; if(x>=n) x-=n;
y=mul(y,y,n)+c; if(y>=n) y-=n;
y=mul(y,y,n)+c; if(y>=n) y-=n;
d=__gcd(abs(x-y),n);
if(d==n) return (ispmiller(n) ? n:pollardrho(n));
}
return d;
}
#undef int
int main() {
#define int long long
int t;
while(t--){
int n; cin >> n;
if(ispmiller(n)) {
cout << n << '\n'; // input n is prime, output as it is
return 0;
}
vector<int> factors; // holds the prime factorisation of input n
sieve(1e6);
for(int i=1; i<np and prime[i]*prime[i]<=n; i++) {
if(n%prime[i]==0) { // n is divisible by prime[i] (<= 1e6)
while(n%prime[i]==0) {
n /= prime[i];
factors.push_back(prime[i]);
}
}
}
if(ispmiller(n)) {
factors.push_back(n);
}
else if(n>1) { // n still has some prime factors > 1e6
int x = pollardrho(n);
assert(x > 1e6);
factors.push_back(x);
factors.push_back(n/x);
}
// Print the factorisation
for(int i=0; i<(int)factors.size()-1; i++) cout << factors[i] << '*';
cout << (factors.empty() ? 1 : factors.back()) << '\n';
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKI2luY2x1ZGUgPGFsZ29yaXRobT4gLy8gX19nY2QoKQojaW5jbHVkZSA8Y3N0cmluZz4gLy8gbWVtc2V0KCkKI2luY2x1ZGUgPGNhc3NlcnQ+IC8vIGFzc2VydCgpCgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSBpbnQgbG9uZyBsb25nCnR5cGVkZWYgbG9uZyBkb3VibGUgZGJsOwoKY29uc3QgaW50IE49MmU2KzEwOwoKaW50IG5wLCBwcmltZVtOXTsKYm9vbCBpc3BbTl07CnZvaWQgc2lldmUoaW50IE4pIHsKICAgIG1lbXNldChpc3AsIHRydWUsIHNpemVvZiBpc3ApOwogICAgaXNwWzBdID0gaXNwWzFdID0gZmFsc2U7CiAgICBmb3IoaW50IGk9MjsgaTxOOyBpKyspIGlmKGlzcFtpXSkgewogICAgICAgIHByaW1lWysrbnBdPWk7CiAgICAgICAgZm9yKGludCBqPTIqaTsgajxOOyBqKz1pKSB7CiAgICAgICAgICAgIGlzcFtqXT1mYWxzZTsKICAgICAgICB9CiAgICB9Cn0KCmlubGluZSBpbnQgbXVsKGludCBhLCBpbnQgYiwgaW50IG0pIHsKCWElPW07IGlmKGE8MCkgYSs9bTsKCWIlPW07IGlmKGI8MCkgYis9bTsKCWludCBxID0gKChkYmwpYSAqIChkYmwpYikgLyAoZGJsKW07CglpbnQgciA9IGEqYiAtIHEqbTsKCXJldHVybiAocjwwID8gcittOnIpOwp9CmlubGluZSBpbnQgcHdyKGludCBhLCBpbnQgbiwgaW50IG0pIHsKICAgIGludCBhbnMoMSk7CiAgICB3aGlsZShuKSB7CiAgICAgICAgaWYobiAmIDEpIGFucyA9IG11bChhbnMsIGEsIG0pOwogICAgICAgIGlmKG4gPj49IDEpIGEgPSBtdWwoYSwgYSwgbSk7CiAgICB9CiAgICByZXR1cm4gYW5zJW07Cn0KaW50IG15cmFuZChpbnQgbikgewoJcmV0dXJuIHJhbmQoKSVuKnJhbmQoKSVuKnJhbmQoKSVuOwp9CmJvb2wgaXNwbWlsbGVyKGludCBwKSB7IC8vIE8oMzAqbG9ncCkKCWlmKHA8MikgcmV0dXJuIGZhbHNlOwoJaWYocD09MikgcmV0dXJuIHRydWU7CglpZihwJTI9PTApIHJldHVybiBmYWxzZTsKCWludCBzPXAtMTsgcz4+PV9fYnVpbHRpbl9jdHpsbChzKTsKCWZvcihpbnQgaT0wOyBpPDYwOyBpKyspIHsKCQlpbnQgdmFsPXB3cihteXJhbmQocC0xKSsxLHMscCksIHRlbXA9czsKCQl3aGlsZSh0ZW1wIT1wLTEgYW5kIDE8dmFsIGFuZCB2YWw8cC0xKSB7CgkJCXZhbD1tdWwodmFsLHZhbCxwKTsKCQkJdGVtcDw8PTE7CgkJfQoJCWlmKHZhbCE9cC0xIGFuZCB0ZW1wJTI9PTApIHJldHVybiBmYWxzZTsKCX0KCXJldHVybiB0cnVlOwp9CmlubGluZSBpbnQgcG9sbGFyZHJobyhpbnQgbikgeyAvLyBPKG5eMC4yNSkKCWlmKG49PTEpIHJldHVybiAxOwoJaWYobiUyPT0wKSByZXR1cm4gMjsKCWludCBjPW15cmFuZChuLTEpKzEsIHg9bXlyYW5kKG4tMikrMiwgeT14OwoJaW50IGQ9MTsgd2hpbGUoZD09MSkgewoJCXg9bXVsKHgseCxuKStjOyBpZih4Pj1uKSB4LT1uOwoJCXk9bXVsKHkseSxuKStjOyBpZih5Pj1uKSB5LT1uOwoJCXk9bXVsKHkseSxuKStjOyBpZih5Pj1uKSB5LT1uOwoJCWQ9X19nY2QoYWJzKHgteSksbik7CgkJaWYoZD09bikgcmV0dXJuIChpc3BtaWxsZXIobikgPyBuOnBvbGxhcmRyaG8obikpOwoJfQoJcmV0dXJuIGQ7Cn0KCiN1bmRlZiBpbnQKaW50IG1haW4oKSB7CiNkZWZpbmUgaW50IGxvbmcgbG9uZwoJaW50IHQ7Cgl3aGlsZSh0LS0pewogICAgaW50IG47IGNpbiA+PiBuOwogICAgaWYoaXNwbWlsbGVyKG4pKSB7CiAgICAJY291dCA8PCBuIDw8ICdcbic7IC8vIGlucHV0IG4gaXMgcHJpbWUsIG91dHB1dCBhcyBpdCBpcwogICAgCXJldHVybiAwOwogICAgfQoKICAgIHZlY3RvcjxpbnQ+IGZhY3RvcnM7IC8vIGhvbGRzIHRoZSBwcmltZSBmYWN0b3Jpc2F0aW9uIG9mIGlucHV0IG4KCiAgICBzaWV2ZSgxZTYpOwogICAgZm9yKGludCBpPTE7IGk8bnAgYW5kIHByaW1lW2ldKnByaW1lW2ldPD1uOyBpKyspIHsKICAgIAlpZihuJXByaW1lW2ldPT0wKSB7IC8vIG4gaXMgZGl2aXNpYmxlIGJ5IHByaW1lW2ldICg8PSAxZTYpCiAgICAJCXdoaWxlKG4lcHJpbWVbaV09PTApIHsKICAgIAkJCW4gLz0gcHJpbWVbaV07CiAgICAJCQlmYWN0b3JzLnB1c2hfYmFjayhwcmltZVtpXSk7CiAgICAJCX0KICAgIAl9CiAgICB9CgogICAgaWYoaXNwbWlsbGVyKG4pKSB7CiAgICAJZmFjdG9ycy5wdXNoX2JhY2sobik7CiAgICB9CiAgICBlbHNlIGlmKG4+MSkgeyAvLyBuIHN0aWxsIGhhcyBzb21lIHByaW1lIGZhY3RvcnMgPiAxZTYKICAgIAlpbnQgeCA9IHBvbGxhcmRyaG8obik7CiAgICAJYXNzZXJ0KHggPiAxZTYpOwogICAgCWZhY3RvcnMucHVzaF9iYWNrKHgpOwogICAgCWZhY3RvcnMucHVzaF9iYWNrKG4veCk7CiAgICB9CgogICAgLy8gUHJpbnQgdGhlIGZhY3RvcmlzYXRpb24KICAgIGZvcihpbnQgaT0wOyBpPChpbnQpZmFjdG9ycy5zaXplKCktMTsgaSsrKSBjb3V0IDw8IGZhY3RvcnNbaV0gPDwgJyonOwoJY291dCA8PCAoZmFjdG9ycy5lbXB0eSgpID8gMSA6IGZhY3RvcnMuYmFjaygpKSA8PCAnXG4nOwoJfQogICAgcmV0dXJuIDA7Cn0=