using System; using static System.Console; using System.Linq; using System.Collections.Generic; class Program { static int NN => int.Parse(ReadLine()); static int[] NList => ReadLine().Split().Select(int.Parse).ToArray(); static int[][] NArr(long n) => Enumerable.Repeat(0, (int)n).Select(_ => NList).ToArray(); static int[] NMi => ReadLine().Split().Select(c => int.Parse(c) - 1).ToArray(); static int[][] NMap(int n) => Enumerable.Repeat(0, n).Select(_ => NMi).ToArray(); public static void Main() { Solve(); } static void Solve() { var f = new HashSet(); for (var i = 1; i <= 9; ++i) f.Add(i); for (var i = 10; i < 1000; ++i) { var prev = 10; var tmp = i; var sum = 0; var flg = true; while (tmp > 0) { var cur = tmp % 10; if (cur > prev) { flg = false; break; } sum += cur; tmp /= 10; prev = cur; } if (flg && f.Contains(sum)) f.Add(i); } flist = new List(f); flist.Sort(); var t = NN; var ans = new long[t]; for (var u = 0; u < t; ++u) { var n = long.Parse(ReadLine()); ans[u] = Forever(n); } WriteLine(string.Join("\n", ans)); } static int mod = 998_244_353; static int rev9 = 443_664_157; static List flist = new List(); static long Forever(long n) { var len = n + 1; var fm = NextFm(len); var eightcount = (fm - len) / 8; var rest = (fm - len) % 8; var e10 = Exp(10, eightcount); return ((Exp(10, len) - 1 + mod) % mod * rev9 % mod + rest * e10 % mod + (e10 - 1 + mod) % mod * 8 % mod * rev9 % mod) % mod; } static long NextFm(long n) { if (n < 1000) { return flist[LowerBound(0, n, flist)]; } var s = n.ToString(); var t = new char[s.Length]; t[0] = s[0]; var over = false; for (var i = 1; i < s.Length; ++i) { if (over) { t[i] = t[i - 1]; } else if (s[i - 1] > s[i]) { over = true; t[i] = s[i - 1]; } else t[i] = s[i]; } var ans = GetT(t); for (var i = t.Length - 1; i >= 0; --i) { if (t[i] < '9') { ++t[i]; for (var j = i + 1; j < t.Length; ++j) t[j] = t[i]; ans = Math.Min(ans, GetT(t)); } } return ans; } static long GetT(char[] _t) { var t = (char[])_t.Clone(); var sum = 0; foreach (var ti in t) sum += ti - '0'; var nsum = flist[LowerBound(0, sum, flist)]; var rest = nsum - sum; for (var i = t.Length - 1; i >= 0; --i) { if (rest == 0) break; while (t[i] < '9') { if (rest == 0) break; ++t[i]; --rest; } } return long.Parse(string.Concat(t)); } static int LowerBound(int left, long min, IList list) { if (list[left] >= min) return left; var ng = left; var ok = list.Count; while (ok - ng > 1) { var center = (ng + ok) / 2; if (list[center] < min) ng = center; else ok = center; } return ok; } static long Exp(long n, long p) { long _n = n % mod; var _p = p; var result = 1L; if ((_p & 1) == 1) result *= _n; while (_p > 0) { _n = _n * _n % mod; _p >>= 1; if ((_p & 1) == 1) result = result * _n % mod; } return result; } }