/* http://projecteuler.net/
 *
 * Problem 62
 * Find the smallest cube for which exactly five permutations of its
 * digits are cube.
 *
 * Solution by Melkor (Filip Niksic, fniksic@gmail.com)
 *
 **/

#include <iostream>
#include <algorithm>
#include <vector>
#include <cmath>
#include <utility>
#include <cstdlib>
#include <map>

using namespace std;

const long long max_num = 999999999999ll;

long long get_num(const long long *first, const long long *last) {
    long long number = 0;
    while (first != last) {
	number = number * 10 + *first;
	++first;
    }
    return number;
}

long long cuberoot(long long number) {
    long long cbroot = static_cast<long long>(cbrtl(static_cast<long double>(number)));
    if (cbroot*cbroot*cbroot == number)
	return cbroot;
    else if ((cbroot+1)*(cbroot+1)*(cbroot+1) == number)
	return cbroot+1;
    else
	return 0;
}

void reverse(long long *p, size_t n) {
    for (size_t i = 0; i < n/2; ++i)
	swap(p[i], p[n-i-1]);
}

// expects enough space to store digits
// returns number of digits
size_t disect(long long n, long long *digits) {
    size_t i = 0;
    while (n > 0) {
	lldiv_t d = lldiv(n, 10);
	digits[i++] = d.rem;
	n = d.quot;
    }
    reverse(digits, i);
    return i;
}   

int main() {
    map<vector<int>, pair<int, long long> > my_map;
    vector<vector<int > > candidates;

    for (long long c = 1; c*c*c <= max_num; ++c) {
	long long n = c*c*c, tmp_n = n;
	vector<int> digits(10, 0);
	while (tmp_n > 0) {
	    lldiv_t d = lldiv(tmp_n, 10);
	    ++digits[d.rem];
	    tmp_n = d.quot;
	}
	if (my_map.count(digits)) {
	    map<vector<int>, pair<int, long long> >::iterator it = my_map.find(digits);
	    ++it->second.first;
	    if (it->second.first == 5)
		candidates.push_back(digits);
	}
	else
	    my_map.insert(make_pair(digits, make_pair(1, n)));
    }
    for (size_t i = 0; i < candidates.size(); ++i) {
	map<vector<int>, pair<int, long long> >::iterator it = my_map.find(candidates[i]);
	cout << it->second.second << "  [" << it->second.first << "]" << endl;
    }

    return 0;
}

