#include #include using namespace std; using i32 = int; using i64 = long long; using i128 = __int128_t; using p2 = pair; using el = tuple; using f64 = long double; using mint = atcoder::modint998244353; void _main(); int main() { ios::sync_with_stdio(false); cin.tie(0); cout << fixed << setprecision(18); _main(); } i64 pow(i64 a, i64 n) { i64 res = 1; i64 x = a; while (n > 0) { if (n & 1) res *= x; x *= x; n >>= 1; } return res; } void _main() { i64 ttt; cin >> ttt; i64 t = 81181819; for (;ttt--;) { i64 n; cin >> n; n = t - n; i64 l = -1, r = 100; vector v; { while (n > 0) { v.push_back(n % 10); n /= 10; } } vector> dp(v.size() + 1, vector(100, {-2, -2, -2})); while (r - l > 1) { i64 mid = (l + r) / 2; dp = vector>(v.size() + 1, vector(100, {-2, -2, -2})); dp[0][0] = {-1, 0, 0}; for (i64 i = 0; i < v.size(); i++) { for (i64 j = 0; j < 100; j++) { if (get<0>(dp[i][j]) == -2) continue; for (i64 a = 0; a <= mid; a++) { for (i64 b = 0; a + b <= mid; b++) { i64 cur = j + a + b * 8; if (v[i] != cur % 10) continue; dp[i + 1][cur / 10] = {j, a, b}; } } } } if (get<0>(dp[v.size()][0]) != -2) r = mid; else l = mid; } dp = vector>(v.size() + 1, vector(100, {-2, -2, -2})); dp[0][0] = {-1, 0, 0}; for (i64 i = 0; i < v.size(); i++) { for (i64 j = 0; j < 100; j++) { if (get<0>(dp[i][j]) == -2) continue; for (i64 a = 0; a <= r; a++) { for (i64 b = 0; a + b <= r; b++) { i64 cur = j + a + b * 8; if (v[i] != cur % 10) continue; dp[i + 1][cur / 10] = {j, a, b}; } } } } i64 now = 0; vector ans(r, 0); for (i64 i = v.size(); i >= 1; i--) { auto [j, a, b] = dp[i][now]; now = j; for (i64 k = 0; k < r; k++) { if (k < a) { ans[k] = ans[k] * 10 + 1; } else if (k < a + b) { ans[k] = ans[k] * 10 + 8; } else { ans[k] = ans[k] * 10; } } } cout << r << "\n"; for (i64 x : ans) cout << x << "\n"; } }