#include <iostream>
#include <iomanip>
#include <map>
using namespace std;
map<unsigned int, unsigned int> factorize(unsigned int n)
{
map<unsigned int, unsigned int> m;
while(n > 1 && n%2 == 0)
{
m[2]++;
n /= 2;
}
if (n > 1) for(unsigned int i = 3; i <= n;)
{
if (n%i == 0) { m[i]++; n /= i; continue; }
i += 2;
}
return m;
}
int main(int argc, const char * argv[])
{
for(unsigned int i = 1; i <= 100; ++i)
{
auto m = factorize(i);
cout << i << ": ";
for(auto it = m.begin(); it != m.end(); ++it)
{
cout << it->first << "^" << it->second << " ";
}
cout << endl;
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KI2luY2x1ZGUgPG1hcD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgptYXA8dW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQ+IGZhY3Rvcml6ZSh1bnNpZ25lZCBpbnQgbikKewogICAgbWFwPHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50PiBtOwogICAgd2hpbGUobiA+IDEgJiYgbiUyID09IDApCiAgICB7CiAgICAgICAgbVsyXSsrOwogICAgICAgIG4gLz0gMjsKICAgIH0KICAgIGlmIChuID4gMSkgZm9yKHVuc2lnbmVkIGludCBpID0gMzsgaSA8PSBuOykKICAgIHsKICAgICAgICBpZiAobiVpID09IDApIHsgbVtpXSsrOyBuIC89IGk7IGNvbnRpbnVlOyB9CiAgICAgICAgaSArPSAyOwogICAgfQogICAgcmV0dXJuIG07Cn0KCmludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyICogYXJndltdKQp7CiAgICBmb3IodW5zaWduZWQgaW50IGkgPSAxOyBpIDw9IDEwMDsgKytpKQogICAgewogICAgICAgIGF1dG8gbSA9IGZhY3Rvcml6ZShpKTsKICAgICAgICBjb3V0IDw8IGkgPDwgIjogIjsKICAgICAgICBmb3IoYXV0byBpdCA9IG0uYmVnaW4oKTsgaXQgIT0gbS5lbmQoKTsgKytpdCkKICAgICAgICB7CiAgICAgICAgICAgIGNvdXQgPDwgaXQtPmZpcnN0IDw8ICJeIiA8PCBpdC0+c2Vjb25kIDw8ICIgICI7CiAgICAgICAgfQogICAgICAgIGNvdXQgPDwgZW5kbDsKICAgIH0KfQoK