//#define _GLIBCXX_DEBUG #include using namespace std; #define ll 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 dpf(81181820, -1); vector dps(81181820, 30000); dpf[0] = 0; dps[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>=dpf.size())break; cand.push_back(now); dpf[now] = now; dps[now] = 1; } rep(i, dpf.size()){ if(i==0)continue; int idx = 0; while(cand[idx]<=dpf[i]){ if(i+cand[idx]>=dpf.size())break; if(dps[i+cand[idx]]>dps[i]+1){ dps[i+cand[idx]] = dps[i]+1; dpf[i+cand[idx]] = cand[idx]; } else if(dps[i+cand[idx]]==dps[i]+1&&dpf[i+cand[idx]]>cand[idx]){ dpf[i+cand[idx]] = cand[idx]; } else break; idx++; } } rep(i, t){ int N; cin >> N; N = 81181819-N; cout << dps[N] << endl; while(N){ cout << dpf[N] << endl; N-=dpf[N]; } } return 0; }