#include<iostream>
#include<math.h>
using namespace std;
//所谓质因子分解:将一个正整数n分解为一个或多个质数乘积的形式
const int maxn = 100001;
int prime[maxn], pNum = 0;//prime表示素数,pNume表示个数
bool p[maxn] = { 0 };
int cnt = 0;//factor个数
struct factor
{
int x, cnt;//x表示质数,cnt表示指数
}fac[10];
//枚举1-sqrt(n)范围内的质因子,如果是因子,就在fac中增加,并且除以其
//如果n!=1,将n放进去。
void Find_Prime(int n)
{
for (int i = 2; i < maxn; i++)
{
if (p[i] == false)
{
if (i > n)
{
return;
}
prime[pNum++] = i;
for (int j = i + i; j < maxn; j+=i)
{
p[j] = true;
}
}
}
}
int main()
{
int n;
scanf("%d", &n);
if (n == 1)
{
printf("1=1
");
return 0;
}
printf("%d=", n);
int x = (int)sqrt(n * 1.0);
Find_Prime(x);
for (int i = 0; i < pNum; i++)
{
if (n % prime[i] == 0)
{
fac[cnt].x = prime[i];
fac[cnt].cnt = 0;
while (n % prime[i] == 0)
{
fac[cnt].cnt++;
n /= prime[i];
}
cnt++;
}
}
if (n != 1)
{
fac[cnt].x = n;
fac[cnt].cnt = 1;
cnt++;
}
//输出
for (int i = 0; i < cnt-1; i++)
{
if(fac[i].cnt!=1)
printf("%d^%d*", fac[i].x, fac[i].cnt);
else
printf("%d*", fac[i].x);
}
if (fac[cnt - 1].cnt != 1)
printf("%d^%d
", fac[cnt - 1].x, fac[cnt - 1].cnt);
else
printf("%d
", fac[cnt - 1].x);
return 0;
}