using System; using static System.Console; using System.Linq; using System.Collections.Generic; using System.Globalization; class Program { static int NN => int.Parse(ReadLine()); static int[] NList => ReadLine().Split().Select(int.Parse).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 t = NN; var ans = new List(); var yi = 81181819; var dp = new int[100]; for (var i = 1; i < dp.Length; ++i) { dp[i] = dp[i - 1] + 1; if (i > 7) dp[i] = Math.Min(dp[i], dp[i - 8] + 1); } for (var u = 0; u < t; ++u) { var n = NN; var m = yi - n; var bitmax = 823543; var all = 10; var ansb = 0; for (var b = 0; b < bitmax; ++b) { var sub = 0; var rest = m; var tmp = b; for (var i = 0; i < 8; ++i) { var count = dp[rest % 10 + tmp % 7 * 10]; sub = Math.Max(sub, count); rest -= tmp % 7 * 10; if (rest < 0) { sub = int.MaxValue; break; } rest /= 10; tmp /= 7; } if (all > sub) { all = sub; ansb = b; } } var map = new char[all][]; for (var i = 0; i < all; ++i) map[i] = new char[8]; var rest2 = m; var tmp2 = ansb; for (var j = 0; j < 8; ++j) { var target = rest2 % 10 + tmp2 % 7 * 10; for (var i = 0; i < all; ++i) { if (target > 7) { map[i][j] = '8'; target -= 8; } else if (target > 0) { map[i][j] = '1'; target -= 1; } else map[i][j] = '0'; } rest2 = (rest2 - tmp2 % 7 * 10) / 10; tmp2 /= 7; } ans.Add(all); for (var i = 0; i < all; ++i) { Array.Reverse(map[i]); ans.Add(int.Parse(string.Concat(map[i]))); } } WriteLine(string.Join("\n", ans)); } }