#nullable enable #region var (_input, _iter) = (Array.Empty(), 0); T I() where T : IParsable { while (_iter >= _input.Length) (_input, _iter) = (Console.ReadLine()!.Trim().Split(' '), 0); return T.Parse(_input[_iter++], null); } #endregion const long max = 888888888888888888L; var vz = new long[100]; for (var i = 0; i < 100; i++) vz[i] = Math.Max(i / 10, i % 10); for (var i = 1; i < 100; i++) vz[i] += vz[i - 1]; var sns = new (long, long)[100]; for (var i = 1; i < 100; i++) { for (var l = 1; l < 100; l++) for (var r = l; r < 100; r++) { if (vz[r] - vz[l - 1] == i) sns[i] = (l, r); } } (long, long) Solve(long n) { if (n < 100) return sns[n]; var (p, q) = long.DivRem(n, 8); return (max - p + 1 + q, max + q); } var ans = new List(); var t = I(); for (var i = 0; i < t; i++) { var (l, r) = Solve(I()); ans.Add(l + " " + r); } Console.WriteLine(string.Join(Environment.NewLine, ans));