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 Rust (1.42.0) (judge verdict: Accepted)

use proconio::input;

fn cal(mut x: u64) -> u64 {
    let mut ans = 0;
    while 0 != x {
        ans += x % 10;
        x /= 10;
    }
    ans
}

fn main() {
    let mut snuke = vec![];
    let mut ten_p = 1;
    for p in 0..16 {
        for k in std::iter::successors(Some(0), |k| Some(k + 1))
            .filter(|k| k % 10 != 9)
            .take_while(|&k| (k + 1) * ten_p - 1 <= (cal(k) + 9 * p) * ten_p)
        {
            snuke.push(ten_p * (k + 1) - 1);
        }
        ten_p *= 10;
    }
    snuke.sort();

    input!(k: usize);
    for &x in snuke.iter().skip(1).take(k) {
        println!("{}", x);
    }
}