#include <bits/stdc++.h>
template <class... Ts>
using tuple_t = std::tuple<Ts...>;
template <class T, class U>
using map_t = std::map<T, U>;
template <class T, class U>
using pair_t = std::pair<T, U>;
template <class T>
using vector_t = std::vector<T>;
template <class T>
using set_t = std::set<T>;
uint64_t digit(uint64_t num, uint64_t base = 10) {
  uint64_t i = 0;
  while (num) {
    ++i;
    num /= base;
  }
  return i;
}
uint64_t digit_sum(uint64_t num, uint64_t base = 10) {
  uint64_t i = 0;
  while (num) {
    i += num % base;
    num /= base;
  }
  return i;
}
double f(int n) { return ((double)n) / digit_sum(n); }
int main() {
  int K;
  std::cin >> K;
  vector_t<int> snuke{1, 2, 3, 4, 5, 6, 7, 8, 9};
  std::queue<pair_t<int, double>> candidates;
  candidates.push(std::make_pair(10, f(10)));
  int n = 11;
  while (snuke.size() < K) {
    double nf = f(n);
    if (nf < candidates.front().second) {
      candidates.pop();
      candidates.push(std::make_pair(n, nf));
    } else {
      if (candidates.front().second < n) {
        snuke.push_back(candidates.front().first);
        candidates.pop();
      }
    }
    ++n;
  }
  for (int i = 0; i < K; ++i) {
    std::cout << snuke[i] << std::endl;
  }
  return 0;
}
