#include<iostream>
using namespace std;
const long maxn=10010;
int prime[maxn],p[maxn],pnum=0;
struct factor{
int x;
int cnt;
}fac[10];
void findPrime(){
for(int i=2;i<maxn;i++){
if(prime[i]==false){
p[pnum++]=i;
for(int j=i+i;j<maxn;j+=i){
prime[j]=true;
}
}
}
}
int index=0;
void findFactor(int Num){
for(int i=0;i<pnum;i++){
if(Num%p[i]==0){
fac[index].x=p[i];
fac[index].cnt=0;
while(Num%p[i]==0){
fac[index].cnt++;
Num/=p[i];
}
index++;
}
if(Num!=1){
fac[index].x=Num;
fac[index].cnt=1;
}
}
}
int main(){
findPrime();
int N;
cin>>N;
if(N==1) printf("1=1\n");
else{
findFactor(N);
printf("%d=",N);
for(int i=0;i<index;i++){
if(fac[i].cnt==1){
printf("%d",fac[i].x);
}
else{
printf("%d^%d",fac[i].x,fac[i].cnt);
}
if(i!=index-1) printf("*");
}
printf("\n");
}
return 0;
}