#include <bits/stdc++.h>
using namespace std;
template <typename T1, typename T2>
using P = pair<T1, T2>;
template <typename T>
using V = vector<T>;
struct edge {
  long long int from, to;
  long long int cost;
};
bool operator<(const edge& edge1, const edge& edge2) {
  return edge1.cost < edge2.cost;
};
const long long int INF = 1e18;
const long long int MOD = 1e9 + 7;
template <typename T>
ostream& operator<<(ostream& s, const V<T>& v) {
  s << "[";
  for (long long int i = 0; i < v.size(); i++) {
    s << v[i];
    if (i < v.size() - 1) s << " ";
  }
  s << "]";
  return s;
}
template <typename T1, typename T2>
ostream& operator<<(ostream& s, const P<T1, T2>& p) {
  s << "(" << p.first << "," << p.second << ")";
  return s;
}
template <typename T>
ostream& operator<<(ostream& s, const set<T>& st) {
  s << "{";
  for (auto i = st.begin(); i != st.end(); ++i) {
    s << *i;
    if (next(i) != st.end()) s << ", ";
  }
  s << "}";
  return s;
}
template <typename T1, typename T2>
ostream& operator<<(ostream& s, const map<T1, T2>& m) {
  s << "{";
  for (auto i = m.begin(); i != m.end(); ++i) {
    s << i->first << ":" << i->second;
    if (next(i) != m.end()) s << ", ";
  }
  s << "}";
  return s;
}
long long int f(long long int n) {
  long long int sum = 0;
  while (n > 0) {
    sum += n % 10;
    n /= 10;
  }
  return sum;
}
long long int power(long long int x, long long int n) {
  long long int res = 1;
  while (n > 0) {
    if ((n & 1) == 1) res *= x;
    x *= x;
    n >>= 1;
  }
  return res;
}
signed main() {
  long long int K;
  cin >> K;
  V<long long int> s;
  for (long long int i = (0); i < (10); ++i) {
    for (long long int j = (0); j < (10); ++j) {
      for (long long int k = (0); k < (16); ++k) {
        long long int n =
            i * power(10, k + 1) + j * power(10, k) + power(10, k) - 1;
        s.push_back(n);
      }
    }
  }
  sort((s).begin(), (s).end());
  (s).erase(unique((s).begin(), (s).end()), (s).end());
  ;
  double MIN = INF;
  stack<long long int> st;
  for (long long int i = (s.size()) - 1; i >= (0); --i) {
    double x = (double)s[i] / f(s[i]);
    if (x <= MIN) {
      MIN = x;
      st.push(s[i]);
    }
  }
  for (long long int i = (0); i < (K); ++i) {
    cout << st.top() << endl;
    st.pop();
  }
  cout << endl;
  return 0;
}
