#include <bits/stdc++.h>
using namespace std;
template <typename T0, typename T1>
std::ostream& operator<<(std::ostream& os, const map<T0, T1>& v) {
  for (typename map<T0, T1>::const_iterator p = v.begin(); p != v.end(); p++) {
    os << p->first << ": " << p->second << " ";
  }
  return os;
}
template <typename T0, typename T1>
std::ostream& operator<<(std::ostream& os, const pair<T0, T1>& v) {
  os << v.first << ": " << v.second << " ";
  return os;
}
template <typename T>
std::ostream& operator<<(std::ostream& os, const vector<T>& v) {
  for (int i = 0; i < (int)v.size(); i++) {
    os << v[i] << " ";
  }
  return os;
}
template <typename T>
std::ostream& operator<<(std::ostream& os, const vector<vector<T> >& v) {
  for (int i = 0; i < (int)v.size(); i++) {
    os << v[i] << endl;
  }
  return os;
}
template <typename T>
std::ostream& operator<<(std::ostream& os, const set<T>& v) {
  vector<T> tmp(v.begin(), v.end());
  os << tmp;
  return os;
}
template <typename T>
std::ostream& operator<<(std::ostream& os, const deque<T>& v) {
  vector<T> tmp(v.begin(), v.end());
  os << tmp;
  return os;
}
double f(long long v) {
  string s = to_string(v);
  long long rv = 0;
  for (int i = 0, _n = (s.size()); (i) < (int)_n; ++i) rv += s[i] - '0';
  double r = (double)v / rv;
  return r;
}
void g(long long v) {
  for (int i = 0, _n = (1); (i) < (int)_n; ++i) {
    f(v + i);
  }
}
int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  long long K;
  while (cin >> K) {
    vector<long long> p10(16, 1LL);
    for (int i = (int)1, _b = (int)(p10.size()); (i) < _b; ++i)
      p10[i] = p10[i - 1] * 10;
    vector<long long> w;
    for (int nn = (int)0, _b = (int)(16); (nn) < _b; ++nn) {
      for (int h = (int)0, _b = (int)(1000); (h) < _b; ++h) {
        long long base = p10[nn];
        long long v = h * base + base - 1;
        if (v) w.push_back(v);
      }
    }
    set<long long> ww((w).begin(), (w).end());
    w = vector<long long>((ww).begin(), (ww).end());
    long long N = w.size();
    vector<double> v(N), Min(N);
    for (int i = 0, _n = (N); (i) < (int)_n; ++i) {
      Min[i] = v[i] = f(w[i]);
    }
    for (int i = N - 1; i >= 0; i--) {
      if (i + 1 < N) Min[i] = min(Min[i], Min[i + 1]);
    }
    for (int i = 0, _n = (K); (i) < (int)_n; ++i) {
      if (v[i] <= Min[i]) {
        cout << w[i] << endl;
      }
    }
  }
  return 0;
}
