#include <bits/stdc++.h>
using namespace std;
inline int in() {
  int x;
  scanf("%d", &x);
  return x;
}
template <typename T>
inline istream& operator>>(istream& i, vector<T>& v) {
  for (int j = 0; j < ((int)(v).size()); ++j) i >> v[j];
  return i;
}
template <typename T>
string join(const vector<T>& v) {
  stringstream s;
  for (int i = 0; i < ((int)(v).size()); ++i) s << ' ' << v[i];
  return s.str().substr(1);
}
template <typename T>
inline ostream& operator<<(ostream& o, const vector<T>& v) {
  if ((int)(v).size()) o << join(v);
  return o;
}
template <typename T1, typename T2>
inline istream& operator>>(istream& i, pair<T1, T2>& v) {
  return i >> v.first >> v.second;
}
template <typename T1, typename T2>
inline ostream& operator<<(ostream& o, const pair<T1, T2>& v) {
  return o << v.first << "," << v.second;
}
template <typename T>
inline long long int suma(const vector<T>& a) {
  long long int res(0);
  for (auto&& x : a) res += x;
  return res;
}
const double eps = 1e-10;
const long long int LINF = 1001002003004005006ll;
const int INF = 1001001001;
const int MX = 200005;
int main() {
  long long int k;
  scanf("%lld", &k);
  long long int x = 0;
  for (int i = 1; i < 10; ++i) {
    cout << i << endl;
    x++;
    if (k == x) {
      return 0;
    }
  }
  long long int n = 19;
  while (x < k) {
    long long int nn = n;
    long long int count = 0;
    while (true) {
      if (nn % 10 == 9) {
        nn /= 10;
        count++;
      } else {
        break;
      }
    }
    if (nn == 0) {
      cout << n << endl;
      x++;
      n += 10;
    } else {
      long long int m = n + pow(10, count);
      long long int sn = 0;
      nn = n;
      while (nn > 0) {
        sn += nn % 10;
        nn /= 10;
      }
      long long int sm = 0;
      long long int mm = m;
      while (mm > 0) {
        sm += mm % 10;
        mm /= 10;
      }
      if (n * sm <= m * sn) {
        cout << n << endl;
        x++;
        n = m;
      } else {
        n += 9 * pow(10, count);
      }
    }
  }
  return 0;
}
