#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using vi = vector<int>;
using vvi = vector<vi>;
using vll = vector<ll>;
using vvll = vector<vll>;
using vb = vector<bool>;
using vs = vector<string>;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0), cout.tie(0);
  vll snukes;
  vi digits(15);
  auto put = [&]() {
    ll v = 0;
    for (int i = 14; i >= 0; i--) v = 10 * v + digits[i];
    snukes.push_back(v);
  };
  for (int lead = 0; lead < 15; lead++) {
    fill((digits).begin(), (digits).end(), 0);
    for (digits[lead] = 1; digits[lead] <= 9; digits[lead]++) {
      put();
      for (int second = lead - 1; second >= 0; second--) {
        for (int trail = 0; trail < second; trail++) digits[trail] = 9;
        for (int between = second + 1; between < lead; between++)
          digits[between] = 0;
        for (digits[second] = 0; digits[second] <= 9; digits[second]++) put();
      }
    }
  }
  auto dsum = [](ll v) {
    ll tot = 0;
    while (v) {
      tot += v % 10;
      v /= 10;
    }
    return tot;
  };
  sort((snukes).begin(), (snukes).end());
  vll good = {snukes.back()};
  for (int i = snukes.size() - 2; i >= 0; i--) {
    if (snukes[i] * dsum(good.back()) <= good.back() * dsum(snukes[i]))
      good.push_back(snukes[i]);
  }
  reverse((good).begin(), (good).end());
  ll K;
  cin >> K;
  for (int i = 0; i < K; i++) cout << good[i] << "\n";
  return 0;
}
