OI VIII - gol (Alt)

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