ANS = Array.new(20001) { [-1, -1, -1] } upper = ANS.size 1.upto(ANS.size // 111) do |c3| 1.upto((ANS.size - c3 * 111) // 11) do |c2| min = {1, c3 - c2 + 1, c2 - c3 + 1}.max max = {ANS.size - c3 * 111 - c2 * 11 - 1, c2 + c3 - 1, upper}.min min.upto(max) do |c1| sum = c1 + c2 * 11 + c3 * 111 ANS[sum] = [c1, c2, c3, 0] end if max == upper upper = min - 1 end end end read_line.to_i.times do puts solve().join(" ") end def solve n = read_line.to_i64 if n % 8 != 0 return [-1] end n //= 8 if n < ANS.size return ANS[n.to_i][0] == -1 ? [-1] : ANS[n.to_i] end ans = Array.new(4, n // 1234) left = n - ans[0] - ans[1] * 11 - ans[2] * 111 - ans[3] * 1111 ans[2] += left // 111 left -= left // 111 * 111 ans[1] += left // 11 left -= left // 11 * 11 ans[0] += left return ans end