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 Go (1.6) (judge verdict: Wrong Answer)

package main

import "os"
import "fmt"
import "bufio"
import "strconv"

func main() {
    var sc = bufio.NewScanner(os.Stdin)
    sc.Split(bufio.ScanWords)
    sc.Scan()
    k, _ := strconv.Atoi(sc.Text())
    a := []int{}
    for i := 1; true; i++ {
        if sunuke(i, i + 1) {
            a = append(a, i)
        }
        if len(a) >= k {
            break
        }
    }

    for i := 0; i < len(a); i++ {
        for j := i + 1; j < len(a); j++ {
            if a[i] > a[j] {
                tmp := a[j]
                a[j] = a[i]
                a[i] = tmp
            }
        }
    }

    for i := 0; i < len(a); i++ {
        fmt.Printf("%d\n", a[i])
    }
}

func sunuke(n int, m int) bool {
    if m > n {
        if (n / fn(n)) <= (m / fn(m)) {
            return true
        }
    }
    return false
}

func fn(v int) int {
    r := 0
    for i := 0; v >= 10; i++ {
        r = r + (v - (v / 10 * 10))
        v = v / 10
    }
    r = r + v
    return r
}