/* -*- coding: utf-8 -*- * * 3316.cc: No.3316 Make 81181819 with only 0,1,or 8 - yukicoder */ #include #include #include using namespace std; /* constant */ const int T = 81181819; const int MAX_D = 8; const int MAX_K = 9 + 4; const int INF = 1 << 30; /* typedef */ /* global variables */ int ds[MAX_D + 1]; int mink; int v1[MAX_D], v8[MAX_D], w1[MAX_D], w8[MAX_D]; int xvs[MAX_D][MAX_K], ps[MAX_K]; /* subroutines */ void rec(int u, int d, int co = 0, int k = 0) { if (u >= d) { if (co == 0 && mink > k) { mink = k; copy(v1, v1 + d, w1); copy(v8, v8 + d, w8); } return; } int du = (ds[u] - co + 10) % 10; for (int c8 = 0; c8 < 5; c8++) { int c1 = (du + 10 - (8 * c8) % 10) % 10; int co1 = (c1 + 8 * c8 + co) / 10; v1[u] = c1, v8[u] = c8; rec(u + 1, d, co1, max(k, c1 + c8)); } } /* main */ int main() { int tn; scanf("%d", &tn); while (tn--) { int n; scanf("%d", &n); int m = T - n, d = 0; while (m > 0) ds[d++] = m % 10, m /= 10; ds[d] = 0; //for (int i = 0; i < d; i++) printf("%d", ds[i]); putchar('\n'); mink = INF; rec(0, d, 0, 0); //printf(" mink=%d\n", mink); for (int i = 0; i < d; i++) { auto &xv = xvs[i]; int c0 = mink - (w1[i] + w8[i]); fill(xv, xv + c0, 0); fill(xv + c0, xv + c0 + w1[i], 1); fill(xv + c0 + w1[i], xv + mink, 8); } int sum = 0; for (int i = 0; i < mink; i++) { int pi = 0; for (int j = d - 1; j >= 0; j--) pi = pi * 10 + xvs[j][i]; ps[i] = pi; sum += pi; } assert(sum + n == T); //printf(" T-n=%d\n", T - n); printf("%d\n", mink); for (int i = 0; i < mink; i++) printf("%08d\n", ps[i]); } return 0; }