#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;
    }
}