#include <iostream>
#include <sstream>
#include <numeric>
#include <vector>
#include <math.h>
using namespace std;
int64_t splitAdd(int64_t value) {
ostringstream intStream;
intStream << value;
string intString(intStream.str());
return accumulate(intString.begin(), intString.end(), 0) - (intString.size() * int64_t('0'));
}
int main(int argc, char *argv[]) {
int64_t maxPower = 50;
std::vector<int64_t> results(maxPower);
for (int64_t tuple = 0; tuple <= maxPower; tuple++) {
for (int64_t power = 0; power <= maxPower; power++) {
int64_t value = pow(tuple, power);
while (value > 9) {
value = splitAdd(value);
}
results.at(power) = value;
}
cout << tuple << endl;
for (int i = 0; i < maxPower; i++) {
cout << results.at(i) << ',';
}
cout << endl;
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3N0cmVhbT4KI2luY2x1ZGUgPG51bWVyaWM+CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxtYXRoLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50NjRfdCBzcGxpdEFkZChpbnQ2NF90IHZhbHVlKSB7CiAgICBvc3RyaW5nc3RyZWFtIGludFN0cmVhbTsKICAgIGludFN0cmVhbSA8PCB2YWx1ZTsKICAgIHN0cmluZyBpbnRTdHJpbmcoaW50U3RyZWFtLnN0cigpKTsKICAgIHJldHVybiBhY2N1bXVsYXRlKGludFN0cmluZy5iZWdpbigpLCBpbnRTdHJpbmcuZW5kKCksIDApIC0gKGludFN0cmluZy5zaXplKCkgKiBpbnQ2NF90KCcwJykpOwp9CgppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKSB7CiAgICBpbnQ2NF90IG1heFBvd2VyID0gNTA7CiAgICBzdGQ6OnZlY3RvcjxpbnQ2NF90PiByZXN1bHRzKG1heFBvd2VyKTsKICAgIGZvciAoaW50NjRfdCB0dXBsZSA9IDA7IHR1cGxlIDw9IG1heFBvd2VyOyB0dXBsZSsrKSB7CiAgICAgICAgZm9yIChpbnQ2NF90IHBvd2VyID0gMDsgcG93ZXIgPD0gbWF4UG93ZXI7IHBvd2VyKyspIHsKICAgICAgICAgICAgaW50NjRfdCB2YWx1ZSA9IHBvdyh0dXBsZSwgcG93ZXIpOwogICAgICAgICAgICB3aGlsZSAodmFsdWUgPiA5KSB7CiAgICAgICAgICAgICAgICB2YWx1ZSA9IHNwbGl0QWRkKHZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXN1bHRzLmF0KHBvd2VyKSA9IHZhbHVlOwogICAgICAgIH0KICAgICAgICBjb3V0IDw8IHR1cGxlIDw8IGVuZGw7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhQb3dlcjsgaSsrKSB7CiAgICAgICAgICAgIGNvdXQgPDwgcmVzdWx0cy5hdChpKSA8PCAnLCc7CiAgICAgICAgfQogICAgICAgIGNvdXQgPDwgZW5kbDsKICAgIH0KfQ==