#define _GLIBCXX_DEBUG #include using namespace std; int main(){ vector> tmp(49,make_pair(1e9,1e9)); tmp[0] = make_pair(0,0); #define f(i) (tmp[i].first+tmp[i].second) for (int i(0);i < 49;++i){ if (i+8<49&&f(i+8)>f(i)+1) tmp[i+8] = tmp[i],++tmp[i+8].first; if (i+1<49&&f(i+1)>f(i)+1) tmp[i+1] = tmp[i],++tmp[i+1].second; } int q; cin >> q; while(q--){ int n; cin >> n; string m = to_string(81181819-n); int s = m.size(); vector dp(s+1,vector>(6,make_pair(1e9,1e9))); dp[0][0] = make_pair(0,-1); for (int i(0);i < s;++i) for (int k(0);k < 6;++k) if (dp[i][k].first!=1e9){ int a = dp[i][k].first; int j = m[s-i-1]-'0'-k; if (j<0) j += 10; for (;j < 49;j+=10) if (dp[i+1][(j+k)/10].first>max(a,f(j))){ dp[i+1][(j+k)/10] = make_pair(max(a,f(j)),k); } } auto [r,b] = dp[s][0]; int c = 0; vector R(r,vector(s)); for (int i(0);i < s;++i){ int k = 0; c = c*10+m[i]-'0'-b; for (int j(0);j < tmp[c].first;++j) R[k++][i] = 8; for (int j(0);j < tmp[c].second;++j) R[k++][i] = 1; c = b,b = dp[s-i-1][b].second; } cout << r << endl; for (auto& A:R){ int i(0); for (;!A[i];++i); for (;i < s;++i) cout << A[i]; cout << endl; } } }