#include //#include using namespace std; // using namespace atcoder; // using mint = modint1000000007; // const int mod = 1000000007; // using mint = modint998244353; // const int mod = 998244353; // const int INF = 1e9; // const long long LINF = 1e18; #define rep(i, n) for (int i = 0; i < (n); ++i) #define rep2(i, l, r) for (int i = (l); i < (r); ++i) #define rrep(i, n) for (int i = (n)-1; i >= 0; --i) #define rrep2(i, l, r) for (int i = (r)-1; i >= (l); --i) #define all(x) (x).begin(), (x).end() #define allR(x) (x).rbegin(), (x).rend() #define P pair template inline bool chmax(A& a, const B& b) { if (a < b) { a = b; return true; } return false; } template inline bool chmin(A& a, const B& b) { if (a > b) { a = b; return true; } return false; } int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); // 100999999999999をベースに考えて // これより-1けた、-2けたで構築が可能か? // 適当に固定してやればできそうだけどめんどう int t; cin >> t; while (t--) { int x; cin >> x; string s; rrep2(i, 1, 10)rrep(j, 10)rrep(k, 10) { if (i <= j + k)continue; int nx = x - i - j - k; if (nx < 0)continue; auto upd = [&](string t) { if (s.empty()) { s = t; return; } if (t.size() > s.size())return; if (t.size() < s.size()) { s = t; return; } if (t < s) { s = t; return; } }; if (nx == 0) { string tmp; tmp += char(i + '0'); tmp += char(j + '0'); tmp += char(k + '0'); upd(tmp); } else if (nx % 9) { string tmp; if (nx % 9 <= i) { tmp += char(nx % 9 + '0'); tmp += char(i + '0'); tmp += char(j + '0'); tmp += char(k + '0'); } else { tmp += char(i + '0'); tmp += char(j + '0'); tmp += char(k + '0'); tmp += char(nx % 9 + '0'); } rep(i, nx / 9)tmp += char('9'); upd(tmp); } else { string tmp; tmp += char(i + '0'); tmp += char(j + '0'); tmp += char(k + '0'); rep(i, nx / 9)tmp += char('9'); upd(tmp); } } cout << s << endl;//tleしたらなきねいり } return 0; }