#include<iostream>
#include<algorithm>
using namespace std;
typedef pair<int, int>PII;
#define int long long
const int N = 1e12 + 10, M = 1e6 + 10;
int n;
PII primes[M];
int cnt;
bool st[M];
void get_primes()
{
if (n == 1)
{
primes[cnt++] = { n,1 };
return;
}
for (int i = 2; i <= n / i; i++)
{
if (!st[i] && n % i == 0)
{
primes[cnt++] = { i,0 };
while (n % i == 0)
{
primes[cnt - 1].second++;
n /= i;
}
for (int j = 0; primes[j].first * i <= n; j++)
{
st[primes[j].first * i] = true;
if (i % primes[j].first == 0)break;
}
}
}
if (n > 1)primes[cnt++] = { n,1 };
}
signed main()
{
cin>>n;
get_primes();
for (int i = 0; i < cnt; i++)
{
if (primes[i].second > 1)cout << primes[i].first << '^' << primes[i].second;
else if (primes[i].second == 1)cout<<primes[i].first;
if (cnt == 2 && i == 0)cout<<" * ";
if (cnt != 2 && i != cnt - 1)cout << " * ";
}
return 0;
}