package main

import (
	"bufio"
	"fmt"
	"math"
	"os"
)

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	var N int
	scanner.Scan()
	fmt.Sscanf(scanner.Text(), "%d", &N)

	snuke := 0
	for i := 0; i < N; i++ {
		snuke = nextSnuke(snuke)
		fmt.Println(snuke)
	}
}

func nextSnuke(n int) int {
	ret := -1
	tmp := math.MaxFloat64

	ds := make([]int, 15)
	org := digits(n + 1)
	for i := 0; i < len(org); i++ {
		ds[15-len(org)+i] = org[i]
	}
	for i := len(ds) - 1; i >= 0; i-- {
		if ds[i] != 9 {
			for j := i + 1; j < len(ds); j++ {
				ds[j] = 9
			}
			for ds[i] != 9 {
				dec := digits2Dec(ds)
				e := eval(dec)
				if e < tmp {
					tmp = e
					ret = dec
				}
				ds[i]++
			}
		}
	}
	return ret
}

func eval(n int) float64 {
	return float64(n) / float64(S(n))
}

func S(n int) int {
	ret := 0
	for _, d := range digits(n) {
		ret = ret + d
	}
	return ret
}

func digits2Dec(digits []int) int {
	ret := 0
	for i := 0; i < len(digits); i++ {
		ret = ret*10 + digits[i]
	}
	return ret
}

func digits(n int) []int {
	ret := make([]int, 0)
	for n > 0 {
		ret = append([]int{n % 10}, ret...)
		n = n / 10
	}
	return ret
}

func min(ns ...int) int {
	ret := math.MaxInt64
	for _, n := range ns {
		if n < ret {
			ret = n
		}
	}
	return ret
}
