//#define _GLIBCXX_DEBUG #include using namespace std; #define ll long long #define int long long #define rep(i, n) for (ll i = 0; i < (ll)(n); i++) #define all(a) (a).begin(), (a).end() const ll INF32 = 2e9; const ll INF64 = 4e18; void printYN(bool ok){ if(ok)cout << "Yes" << endl; else cout << "No" << endl; return; } signed main() { int t; cin >> t; vector> dp(81181820, make_pair(-1, INF32)); dp[0] = {0,0}; vector cand; rep(i, 3*3*3*3*3*3*3*3){ if(i==0)continue; int ii = i; const vector n = {0,1,8}; int now = 0; rep(j, 8){ int b = 1; rep(k, j)b*=10; now += b*n[ii%3]; ii/=3; } if(now>=dp.size())break; cand.push_back(now); dp[now] = {now, 1}; } rep(i, dp.size()){ if(i==0)continue; int idx = 0; while(cand[idx]<=dp[i].first){ if(i+cand[idx]>=dp.size())break; if(dp[i+cand[idx]].second>dp[i].second+1){ dp[i+cand[idx]].second = dp[i].second+1; dp[i+cand[idx]].first = cand[idx]; } else if(dp[i+cand[idx]].second==dp[i].second+1&&dp[i+cand[idx]].first>cand[idx]){ dp[i+cand[idx]].first = cand[idx]; } else break; idx++; } } rep(i, t){ int N; cin >> N; N = 81181819-N; cout << dp[N].second << endl; while(N){ cout << dp[N].first << endl; N-=dp[N].first; } } return 0; }