Problem:
Score : 500 points

Problem Statement

Let S(n) denote the sum of the digits in the decimal notation of n.
For example, S(123) = 1 + 2 + 3 = 6.

We will call an integer n a Snuke number when, for all positive integers m such that m > n, \frac{n}{S(n)} \leq \frac{m}{S(m)} holds.

Given an integer K, list the K smallest Snuke numbers.

Constraints

1 \leq K

The K-th smallest Snuke number is not greater than 10^{15}.

Input

Input is given from Standard Input in the following format:

K

Output

Print K lines. The i-th line should contain the i-th smallest Snuke number.

Sample Input 1

10

Sample Output 1

1
2
3
4
5
6
7
8
9
19

Solution in Scala (2.11.7) (judge verdict: Time Limit Exceeded)

import java.util.Scanner

object Main {
  def main(args: Array[String]): Unit = println(solve(new Scanner(System.in)))

  def solve(in: String): String = solve(new Scanner(in))

  def snukeD(N: Long): Long = {
    var n = N
    var m = 0L
    while (n > 0) {
      m += (n % 10)
      n /= 10
    }
    m
  }

  def f(N: Long): Long = {
    var n = N
    var sd = snukeD(N)
    var min = n
    var minD = n.toDouble / sd.toDouble
    var delta = 1
    for (i <- 1 until N.toString.length) {
      while ((n + 1) % (delta * 10) != 0) {
        n += delta
        sd += 1
        val dd = n.toDouble / sd.toDouble
        if (dd < minD) {
          min = n
          minD = dd
        }
      }
      delta *= 10
    }
    min
  }

  def solve(sc: Scanner): String = {
    val K = sc.nextInt

    var n = 1L
    for (i <- 1 to K) {
      println(n)
      n = f(n + 1)
    }
    ""
  }
}