0404c9ecf2e3326e802b1a8332781f8883d372398c7f84cd64e26238f4ac4a14
// https://szkopul.edu.pl/problemset/problem/B8uHcsCWL_20NSJij1AL1b4C/site/?key=statement
// Autor: MARCIN MUCHA (przetłumaczono z Pascal do C++)
#include <iostream>
using namespace std;
const int first_arr[27] = {0, 0, 0, 3, 0, 5, 0, 7, 5, 0, 7, 11, 7, 13, 11, 7, 11, 17, 11, 11, 13, 11, 17, 11, 13, 13, 11};
const int COVER_SIZE = 29;
const int cover[30] = {0, 1000000007, 500000009, 250000013, 125000077, 62500073, 31250047, 15625031, 7812521, 3906269,
1953151, 976601, 488309, 244177, 122099, 61057, 30539, 15277, 7649, 3833,
1931, 971, 491, 251, 131, 71, 41, 29, 23, 17};
const int N_MIN = 27;
int result_stack[41];
int ssize_val = 0;
void result() {
cout << ssize_val << "\n";
for (int i = ssize_val; i >= 1; i--) {
cout << result_stack[i];
if (i != 1) cout << " ";
}
cout << "\n";
}
void push(int i) {
ssize_val++;
result_stack[ssize_val] = i;
}
void search(int n) {
ssize_val = 0;
int i = 1;
while (n > 0) {
int p;
if (n < N_MIN) {
p = first_arr[n];
} else {
while (cover[i] + 10 > n) {
i++;
}
p = cover[i];
}
push(p);
n = n - p;
}
}
int main() {
int m;
cin >> m;
for (int i = 1; i <= m; i++) {
int n;
cin >> n;
search(n);
result();
}
return 0;
}