/*
Migrated from Lutece 2015 质因子分解
Description
读入一个自然数n, 将n分解为质因子连乘的形式输出.
Input
有多组测试数据. 输入的第一行是整数T(0<T<=10000), 表示测试数据的组数. 每一组测试数据只有一行, 由待分解的自然数n构成. 1<n<2^31.
Output
对应每组输入, 输出一行分解结果, 具体样式参看样例.
*/
// #include <iostream>
// #include <vector>
// #include <climits>
// void solve(){
// int num;std::cin>>num;
// std::cout<<num<<"=";
// for(int i = 2;)
// }
// int main(){
// int T;std::cin>>T;
// while(T--){
// solve();
// }
// }
#include <iostream>
#include <vector>
#include <cmath>
void solve() {
long long num;std::cin >> num;
std::cout << num << "=";
bool first = true;
for (long long i = 2; i * i <= num; ++i) {
//num = a*b, a<=b, a<=sqrt(num), b>=sqrt(num)
//若num的质因子中有大于sqrt(num)的数,则其它所有的质因子均小于sqrt(num)
while (num % i == 0) {
if (!first) {
std::cout << "*";
}
std::cout << i;
num /= i;
first = false;
}
}
if (num > 1) {
if (!first) {
std::cout << "*";
}
std::cout << num;
}
std::cout << std::endl;
}
int main() {
int T;
std::cin >> T;
while (T--) {
solve();
}
return 0;
}
// void printPrime(){
// std::vector<unsigned int> prime{2};
// for(int i = 3;prime.back()<10000;++i){
// bool isPrime=true;
// for(int j=0;j<prime.size();j++){
// if(i%prime[j]==0){
// isPrime=false;
// break;
// }
// }
// if(isPrime){
// prime.push_back(i);
// }
// }
// std::cout<<"unsigned int primes["<<prime.size()<<"]={";
// for(int i = 0;i<prime.size()-1;++i)std::cout<<prime[i]<<",";
// std::cout<<prime.back()<<"};"<<std::endl;
// }
// 埃拉托色尼筛法,生成所有小于等于给定数n的质数
// 埃拉托色尼筛法的基本思想是从最小的质数开始,标记其所有倍数为合数,
// 然后继续处理下一个未标记的数,直到处理完所有小于等于 n 的数
// std::vector<unsigned int> sieve(unsigned int max) {
// std::vector<bool> is_prime(max + 1, true);
// is_prime[0] = is_prime[1] = false; // 0 和 1 不是质数
// for (unsigned int i = 2; i * i <= max; ++i) {
// if (is_prime[i]) {
// for (unsigned int j = i * i; j <= max; j += i) {
// is_prime[j] = false;
// }
// }
// }
// std::vector<unsigned int> primes;
// for (unsigned int i = 2; i <= max; ++i) {
// if (is_prime[i]) {
// primes.push_back(i);
// }
// }
// return primes;
// }