#include #include using namespace std; typedef long long ll; struct cube_t { int weight; int price; }; cube_t cubes[100]; int D; ll dp[10005000]; int back[10005000]; int result[100]; int main() { cubes[0] = (cube_t) { 1, 1 }; for (int i = 1; ; i++) { cube_t prev = cubes[i-1]; cubes[i] = (cube_t) { prev.weight * 3, prev.price * 3 + (prev.weight * 2) }; //printf("# cube %d %d\n", cubes[i].weight, cubes[i].price); if (cubes[i].weight > 10000000) { D = i; break; } } dp[0] = 0; back[0] = -1; for (int i = 1; i <= 10000000; i++) { for (int j = 0; j < D; j++) { cube_t c = cubes[j]; if (i-c.weight >= 0) { int price = dp[i-c.weight] + c.price; if (price > dp[i]) { dp[i] = price; back[i] = j; } } } } int T; scanf("%d", &T); for (int t = 1; t <= T; t++) { int K; scanf("%d", &K); for (int i = 0; i < D; i++) { result[i] = 0; } int k = K; while (k != 0) { result[back[k]]++; k -= cubes[back[k]].weight; } bool display = false; for (int i = D-1; i >= 1; i--) { if (result[i]) display = true; if (display) { printf("%d ", result[i]); } } printf("%d\n", result[0]); } return 0; }