/* 笔记
第一 要是longlong类型的数据
第二关于素数,因为素数只有1和其本身故素数直接输出1和其本身即可
第三 我们for循环遍历是遍历到sqrt(n) 这是因为大于其开方那么肯定没法整除的
第四 就是不断遍历了 其中我用t和tt代替n和i ,一个while循环看看num最多能几个,如果符合就更替
第五 它要的是最小连续子序列 所以我们判断更新num的条件是sum《num 如果是选择大的 那么就是sum<=num;喽
*/
#include<iostream>
#include<math.h>
#include<vector>
typedef long long ll;
using namespace std;
bool isprime(ll n)
{
//if (n == 1) return 0;
for (ll i = 2; i <= sqrt(n); i++)
{
if (n % i == 0) return 0;
}
return 1;
}
int main()
{
ll n;
cin >> n;
ll sum = 0,t,tt,num,start;
for (ll i = 2;i<sqrt(n); i++)
{
if (n % i) {//不能整除 直接下一个即可
continue;
}
else {
num = 0;
t = n;
tt = i;
while (t % tt == 0) //看看最多几位
{
num++;
t /= tt;
tt++;
}
if (sum < num) { //换
sum = num;
start = i;
}
}
}
if (isprime(n)) cout << "1" << endl << n;
else
{
int f = 0;
cout << sum << endl;
for (int i = 0; i < sum; i++)
{
if (f) cout << "*";
cout << start++;
f = 1;
}
}
}