#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using namespace atcoder; typedef long long ll; #define rep(i, n) for (int i = 0; i < (int)(n); i++) #define repr(i, n) for (int i = (int)(n) - 1; i >= 0; i--) #define repk(i, k, n) for (int i = k; i < (int)(n); i++) #define all(v) v.begin(), v.end() #define mod1 1000000007 #define mod2 998244353 #define mod3 100000007 #define vi vector #define vs vector #define vc vector #define vl vector #define vb vector #define vvi vector> #define vvc vector> #define vvl vector> #define vvb vector> #define vvvi vector>> #define vvvl vector>> #define pii pair #define pil pair #define pli pair #define pll pair #define vpii vector> #define vpll vector> #define vvpii vector>> #define vvpll vector>> template void debug(T e) { cerr << e << endl; } template void debug(vector &v) { rep(i, v.size()) { cerr << v[i] << " "; } cerr << endl; } template void debug(vector> &v) { rep(i, v.size()) { rep(j, v[i].size()) { cerr << v[i][j] << " "; } cerr << endl; } } template void debug(vector> &v) { rep(i, v.size()) { cerr << v[i].first << " " << v[i].second << endl; } } template void debug(set &st) { for (auto itr = st.begin(); itr != st.end(); itr++) { cerr << *itr << " "; } cerr << endl; } template void debug(multiset &ms) { for (auto itr = ms.begin(); itr != ms.end(); itr++) { cerr << *itr << " "; } cerr << endl; } template void debug(map &mp) { for (auto itr = mp.begin(); itr != mp.end(); itr++) { cerr << itr->first << " " << itr->second << endl; } } void debug_out() { cerr << endl; } template void debug_out(Head H, Tail... T) { cerr << H << " "; debug_out(T...); } using mint = modint998244353; void debug_mint1(vector &vec) { for (int i = 0; i < vec.size(); i++) { cerr << vec[i].val() << " "; } cerr << endl; } void debug_mint2(vector> &vec) { for (int i = 0; i < vec.size(); i++) { for (int j = 0; j < vec[i].size(); j++) { cerr << vec[i][j].val() << " "; } cerr << endl; } } vector dfs(map> &memo, ll k, ll now, map> &mp){ // メモ化再帰 if (now == 0){ vector vec(k, 0); return vec; } else if (memo.find(now) != memo.end()){ return memo[now]; } for (ll i = 0; i < 80; i++){ if (mp.find(make_pair(k, i)) != mp.end() && now >= i && (now - i) % 10 == 0){ vector vec = dfs(memo, k, (now - i) / 10, mp); if (vec[0] == -1){ continue; } for (ll j = 0; j < k; j++){ vec[j] = vec[j] * 10 + mp[make_pair(k, i)][j]; } memo[now] = vec; return vec; } } vector game_over(k, -1); return memo[now] = game_over; } int main(){ // 最初に数とそれを実現する組を全列挙しておく vector unit = {0, 1, 8}; map> mp; mp[make_pair(1, 0)] = {0}; mp[make_pair(1, 1)] = {1}; mp[make_pair(1, 8)] = {8}; for (ll i = 1; i < 10; i++){ for (ll j = 0; j <= 80; j++){ if (mp.find(make_pair(i, j)) == mp.end()){ continue; } vector vec = mp[make_pair(i, j)]; for (ll k = 0; k < 3; k++){ vec.push_back(unit[k]); if (mp.find(make_pair(i + 1, j + unit[k])) == mp.end()){ mp[make_pair(i + 1, j + unit[k])] = vec; } vec.pop_back(); } } } ll T; cin >> T; while (T--){ ll N; cin >> N; N = 81181819 - N; // 10 個以内で可能ではある for (ll i = 1; i <= 10; i++){ map> memo; vector ans = dfs(memo, i, N, mp); if (ans[0] != -1){ cout << i << endl; for (ll j = 0; j < i; j++){ cout << ans[j] << endl; } break; } } } }