#include<iostream>
#include <bits/stdc++.h>
using namespace std;
typedef long long int ll;
void seive(int r, vector<int> &spf) {
vector<int> arr(r + 1, 1);
spf.resize(r + 1);
for (int i = 0; i <= r; i++) {
spf[i] = i;
}
for (int i = 2; i <= r; i++) {
if (arr[i] == 1) {
ll j = (ll)i * i;
while (j <= r) {
if (spf[j] == j) {
spf[j] = i;
}
arr[j] = 0;
j += i;
}
}
}
}
unordered_map<ll, ll> factors(ll v, vector<int> &spf) {
unordered_map<ll, ll> mpp;
while (v != 1) {
ll a = spf[v];
mpp[a]++;
v = v / a;
}
return mpp;
}
int main() {
int r;
cin >> r;
vector<int> spf;
seive(r, spf);
ll v;
cin >> v;
unordered_map<ll, ll> mpp = factors(v, spf);
for (auto it : mpp) {
cout << it.first << "^" << it.second << " ";
}
return 0;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdHlwZWRlZiBsb25nIGxvbmcgaW50IGxsOwoKdm9pZCBzZWl2ZShpbnQgciwgdmVjdG9yPGludD4gJnNwZikgewogICAgdmVjdG9yPGludD4gYXJyKHIgKyAxLCAxKTsKICAgIHNwZi5yZXNpemUociArIDEpOwoKICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IHI7IGkrKykgewogICAgICAgIHNwZltpXSA9IGk7CiAgICB9CgogICAgZm9yIChpbnQgaSA9IDI7IGkgPD0gcjsgaSsrKSB7CiAgICAgICAgaWYgKGFycltpXSA9PSAxKSB7CiAgICAgICAgICAgIGxsIGogPSAobGwpaSAqIGk7CgogICAgICAgICAgICB3aGlsZSAoaiA8PSByKSB7CiAgICAgICAgICAgICAgICBpZiAoc3BmW2pdID09IGopIHsKICAgICAgICAgICAgICAgICAgICBzcGZbal0gPSBpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGFycltqXSA9IDA7CiAgICAgICAgICAgICAgICBqICs9IGk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KCnVub3JkZXJlZF9tYXA8bGwsIGxsPiBmYWN0b3JzKGxsIHYsIHZlY3RvcjxpbnQ+ICZzcGYpIHsKICAgIHVub3JkZXJlZF9tYXA8bGwsIGxsPiBtcHA7CgogICAgd2hpbGUgKHYgIT0gMSkgewogICAgICAgIGxsIGEgPSBzcGZbdl07CiAgICAgICAgbXBwW2FdKys7CiAgICAgICAgdiA9IHYgLyBhOwogICAgfQoKICAgIHJldHVybiBtcHA7Cn0KCmludCBtYWluKCkgewogICAgaW50IHI7CiAgICBjaW4gPj4gcjsKCiAgICB2ZWN0b3I8aW50PiBzcGY7CiAgICBzZWl2ZShyLCBzcGYpOwoKICAgIGxsIHY7CiAgICBjaW4gPj4gdjsKCiAgICB1bm9yZGVyZWRfbWFwPGxsLCBsbD4gbXBwID0gZmFjdG9ycyh2LCBzcGYpOwoKICAgIGZvciAoYXV0byBpdCA6IG1wcCkgewogICAgICAgIGNvdXQgPDwgaXQuZmlyc3QgPDwgIl4iIDw8IGl0LnNlY29uZCA8PCAiICI7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0K