#include <iostream>
#include <cmath>
using namespace std;
int powi(int x, int e)
{
int y = 1;
while(e) {
if (e&1) y *= x;
x*=x;
e >>= 1;
}
return y;
}
int main(int argc, char * argv[])
{
for(int n = 1; n <= 10000; ++n)
{
int d = 0, m = n;
while(m) { d += m%10; m /= 10; }
int e = 1;
if (d > 1) e = round(log(n)/log(d));
if (powi(d,e) == n)
cout << n << ": " << d << "^" << e << " = " << n << endl;
}
}
ICAgICNpbmNsdWRlIDxpb3N0cmVhbT4KICAgICNpbmNsdWRlIDxjbWF0aD4KICAgIAogICAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKICAgIAogICAgaW50IHBvd2koaW50IHgsIGludCBlKQogICAgewogICAgICAgIGludCB5ID0gMTsKICAgICAgICB3aGlsZShlKSB7CiAgICAgICAgICAgIGlmIChlJjEpIHkgKj0geDsKICAgICAgICAgICAgeCo9eDsKICAgICAgICAgICAgZSA+Pj0gMTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHk7CiAgICB9CiAgICAKICAgIGludCBtYWluKGludCBhcmdjLCBjaGFyICogYXJndltdKQogICAgewogICAgICAgIGZvcihpbnQgbiA9IDE7IG4gPD0gMTAwMDA7ICsrbikKICAgICAgICB7CiAgICAgICAgICAgIGludCBkID0gMCwgbSA9IG47CiAgICAgICAgICAgIHdoaWxlKG0pIHsgZCArPSBtJTEwOyBtIC89IDEwOyB9CiAgICAgICAgICAgIGludCBlID0gMTsKICAgICAgICAgICAgaWYgKGQgPiAxKSBlID0gcm91bmQobG9nKG4pL2xvZyhkKSk7CiAgICAgICAgICAgIGlmIChwb3dpKGQsZSkgPT0gbikKICAgICAgICAgICAgICAgIGNvdXQgPDwgbiA8PCAiOiAiIDw8IGQgPDwgIl4iIDw8IGUgPDwgIiA9ICIgPDwgbiA8PCBlbmRsOwogICAgICAgIH0KICAgIH0KCgo=