#include <bits/stdc++.h>
using usize = std::size_t;
using i64 = long long;
double calc(i64 x) {
  i64 value = x;
  double sum = 0;
  while (value > 0) {
    sum += (value % 10);
    value /= 10;
  }
  return 1.0 * double(x) / sum;
}
int main() {
  usize k;
  std::cin >> k;
  std::vector<i64> num;
  for (i64 ten = 1, _ = 0; _ < 16; _++, ten *= 10) {
    const i64 base = ten - 1;
    for (i64 i = 0; i < 10000; i++) {
      if (i64 value = i * ten + base; value > 0) {
        num.push_back(value);
      }
    }
  }
  std::sort(num.begin(), num.end());
  num.erase(std::unique(num.begin(), num.end()), num.end());
  const usize n = num.size();
  std::vector<double> snk(n), min(n + 1, (1LL << 60));
  for (usize i = 0; i < n; i++) snk[i] = calc(num[i]);
  min[n - 1] = snk[n - 1];
  for (usize i = n; i > 0; i--) {
    min[i - 1] = std::min(min[i], snk[i - 1]);
  }
  std::vector<i64> ans;
  for (usize i = 0; i < n; i++) {
    if (snk[i] <= min[i]) ans.push_back(num[i]);
  }
  for (usize i = 0; i < k; i++) {
    std::cout << ans[i] << '\n';
  }
  return 0;
}
