#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1000000;
vector<long long> res;
void spf() {
res.resize(MAXN + 1);
for (int i = 2; i <= MAXN; i++) {
res[i] = i;
}
for (int i = 2; i * i <= MAXN; i++) {
if (res[i] == i) {
for (int j = i * i; j <= MAXN; j += i) {
if (res[j] == j) {
res[j] = i;
}
}
}
}
}
unordered_map<long long,long long> helper_fn(long long n) {
unordered_map<long long,long long> mpp;
while (n != 1) {
long long d = res[n];
mpp[d]++;
n /= d;
}
return mpp;
}
int main() {
spf();
int n;
cin >> n;
vector<int> nums(n);
for (int i = 0; i < n; i++) {
cin >> nums[i];
auto mpp = helper_fn(nums[i]);
for (auto it : mpp) {
cout << it.first << "^" << it.second << " ";
}
cout<<endl;
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBpbnQgTUFYTiA9IDEwMDAwMDA7CnZlY3Rvcjxsb25nIGxvbmc+IHJlczsKCnZvaWQgc3BmKCkgewogICAgcmVzLnJlc2l6ZShNQVhOICsgMSk7CgogICAgZm9yIChpbnQgaSA9IDI7IGkgPD0gTUFYTjsgaSsrKSB7CiAgICAgICAgcmVzW2ldID0gaTsKICAgIH0KCiAgICBmb3IgKGludCBpID0gMjsgaSAqIGkgPD0gTUFYTjsgaSsrKSB7CiAgICAgICAgaWYgKHJlc1tpXSA9PSBpKSB7CiAgICAgICAgICAgIGZvciAoaW50IGogPSBpICogaTsgaiA8PSBNQVhOOyBqICs9IGkpIHsKICAgICAgICAgICAgICAgIGlmIChyZXNbal0gPT0gaikgewogICAgICAgICAgICAgICAgICAgIHJlc1tqXSA9IGk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KCnVub3JkZXJlZF9tYXA8bG9uZyBsb25nLGxvbmcgbG9uZz4gaGVscGVyX2ZuKGxvbmcgbG9uZyBuKSB7CiAgICB1bm9yZGVyZWRfbWFwPGxvbmcgbG9uZyxsb25nIGxvbmc+IG1wcDsKCiAgICB3aGlsZSAobiAhPSAxKSB7CiAgICAgICAgbG9uZyBsb25nIGQgPSByZXNbbl07CiAgICAgICAgbXBwW2RdKys7CiAgICAgICAgbiAvPSBkOwogICAgfQogICAgcmV0dXJuIG1wcDsKfQoKaW50IG1haW4oKSB7CiAgICBzcGYoKTsKCiAgICBpbnQgbjsKICAgIGNpbiA+PiBuOwogICAgdmVjdG9yPGludD4gbnVtcyhuKTsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewogICAgICAgIGNpbiA+PiBudW1zW2ldOwogICAgICAgIGF1dG8gbXBwID0gaGVscGVyX2ZuKG51bXNbaV0pOwogICAgICAgIGZvciAoYXV0byBpdCA6IG1wcCkgewogICAgICAgICAgICBjb3V0IDw8IGl0LmZpcnN0IDw8ICJeIiA8PCBpdC5zZWNvbmQgPDwgIiAiOwogICAgICAgIH0KICAgIAljb3V0PDxlbmRsOwogICAgfQogICAgcmV0dXJuIDA7Cn0K