#include using namespace std; int m=7; vector> cand(m+1); vector>> vec(m+1,vector>(100)); void solve(){ using ll=long long; ll n; cin>>n; string s=to_string(81181819-n); reverse(s.begin(),s.end()); int k=10; while (s.size()> dp(k+1,vector(10)); vector prev(k+1,vector>(10)); dp[0][0]=true; prev[0][0]={-1,-1}; for (int a=0;a<=m;a++){ for (int i=0;i ans(a); ll now=0; ll pw=1; for (int i=0;i0;i--){ pw/=10; auto p=prev[i][now]; now=p.first; for (int j=0;j mem; auto dfs=[&](auto dfs,int v,int k=0){ cand[k].push_back(v); vec[k][v]=mem; if (k==m) return; for (int i:{0,1,8}){ mem.push_back(i); dfs(dfs,v+i,k+1); mem.pop_back(); } }; dfs(dfs,0); for (int i=0;i<=m;i++) cand[i].erase(unique(cand[i].begin(),cand[i].end()),cand[i].end()); int t; cin>>t; while (t--) solve(); } /* using ll=long long; ll m=81181819+10; ll inf=1e9; vector vec; vector d(m,inf); void solve(){ ll n; cin>>n; cout<=m) return; for (int u:{0,1,8}){ if (v==0&&u==0) continue; dfs(dfs,v*10+u); } }; dfs(dfs,0); sort(vec.begin(),vec.end()); queue q; d[0]=0; q.push(0); while (!q.empty()){ int v=q.front(); q.pop(); for (int u:vec){ int nv=v+u; if (nv>=m) break; if (d[nv]!=inf) continue; d[nv]=d[v]+1; q.push(nv); } } int t; cin>>t; while (t--) solve(); } */