#include <bits/stdc++.h>
using namespace std;
const int dx[] = {1, 0, -1, 0}, dy[] = {0, -1, 0, 1};
const int dx_8[] = {1, 1, 0, -1, -1, -1, 0, 1},
          dy_8[] = {0, -1, -1, -1, 0, 1, 1, 1};
const long long MOD = 1e9 + 7;
template <typename T>
inline T GCD(T a, T b) {
  T c;
  while (b != 0) {
    c = a % b;
    a = b;
    b = c;
  }
  return a;
}
template <typename T>
inline T LCM(T a, T b) {
  T c = GCD(a, b);
  a /= c;
  return a * b;
}
template <typename T>
inline T nCr(T a, T b) {
  T i, r = 1;
  for (i = 1; i <= b; i++) {
    r *= (a + 1 - i);
    r /= i;
  }
  return r;
}
template <typename T>
inline T nHr(T a, T b) {
  return nCr(a + b - 1, b);
}
signed main(void) {
  cin.tie(0);
  ios::sync_with_stdio(false);
  long long k;
  cin >> k;
  long long ans[] = {1,  2,  3,  4,  5,  6,  7,  8,  9,
                     19, 29, 39, 49, 59, 69, 79, 89, 99};
  if (k <= 18) {
    for (long long i = 0; i < (k); ++i) cout << ans[i] << '\n';
  } else {
    vector<long long> snuke;
    for (long long i = 0; i < (18); ++i) snuke.emplace_back(ans[i]);
    long long n = 99, cnt = 0, limit = 19, plus = 100;
    while (snuke.size() < k) {
      n += plus;
      cnt++;
      snuke.emplace_back(n);
      if (cnt == limit) {
        limit += 9;
        cnt = 0;
        plus *= 10;
      }
    }
    for (long long a : snuke) cout << a << '\n';
  }
  return 0;
}
