#include <bits/stdc++.h>
using namespace std;
const long long llinf = LLONG_MAX;
const unsigned long long ullinf = ULLONG_MAX;
int n;
vector<pair<double, long long> > v;
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.precision(10);
  cout << fixed;
  cin >> n;
  for (long long i = 1; i <= 9; i++) {
    string s = to_string(i);
    int res = 0;
    for (int j = 0; j < (int)s.size(); j++) {
      res += s[j] - '0';
    }
    v.push_back({(double)i / res, i});
  }
  for (long long i = 19; i <= 99; i += 10) {
    string s = to_string(i);
    int res = 0;
    for (int j = 0; j < (int)s.size(); j++) {
      res += s[j] - '0';
    }
    v.push_back({(double)i / res, i});
  }
  for (long long i = 199; i <= 999; i += 100) {
    string s = to_string(i);
    int res = 0;
    for (int j = 0; j < (int)s.size(); j++) {
      res += s[j] - '0';
    }
    v.push_back({(double)i / res, i});
  }
  for (long long i = 1099; i <= 10000; i += 100) {
    string s = to_string(i);
    int res = 0;
    for (int j = 0; j < (int)s.size(); j++) {
      res += s[j] - '0';
    }
    v.push_back({(double)i / res, i});
  }
  for (long long i = 10999; i <= 100000; i += 1000) {
    string s = to_string(i);
    int res = 0;
    for (int j = 0; j < (int)s.size(); j++) {
      res += s[j] - '0';
    }
    v.push_back({(double)i / res, i});
  }
  for (long long i = 109999; i <= 1000000; i += 10000) {
    string s = to_string(i);
    int res = 0;
    for (int j = 0; j < (int)s.size(); j++) {
      res += s[j] - '0';
    }
    v.push_back({(double)i / res, i});
  }
  for (long long i = 1009999; i <= 10000000; i += 10000) {
    string s = to_string(i);
    int res = 0;
    for (int j = 0; j < (int)s.size(); j++) {
      res += s[j] - '0';
    }
    v.push_back({(double)i / res, i});
  }
  for (long long i = 10099999; i <= 100000000; i += 100000) {
    string s = to_string(i);
    int res = 0;
    for (int j = 0; j < (int)s.size(); j++) {
      res += s[j] - '0';
    }
    v.push_back({(double)i / res, i});
  }
  for (long long i = 100099999; i <= 1000000000; i += 100000) {
    string s = to_string(i);
    int res = 0;
    for (int j = 0; j < (int)s.size(); j++) {
      res += s[j] - '0';
    }
    v.push_back({(double)i / res, i});
  }
  for (long long i = 1000999999; i <= 10000000000; i += 1000000) {
    string s = to_string(i);
    int res = 0;
    for (int j = 0; j < (int)s.size(); j++) {
      res += s[j] - '0';
    }
    v.push_back({(double)i / res, i});
  }
  for (long long i = 10000999999; i <= 100000000000; i += 1000000) {
    string s = to_string(i);
    int res = 0;
    for (int j = 0; j < (int)s.size(); j++) {
      res += s[j] - '0';
    }
    v.push_back({(double)i / res, i});
  }
  for (long long i = 100009999999; i <= 1000000000000; i += 10000000) {
    string s = to_string(i);
    int res = 0;
    for (int j = 0; j < (int)s.size(); j++) {
      res += s[j] - '0';
    }
    v.push_back({(double)i / res, i});
  }
  for (long long i = 1000009999999; i <= 10000000000000; i += 10000000) {
    string s = to_string(i);
    int res = 0;
    for (int j = 0; j < (int)s.size(); j++) {
      res += s[j] - '0';
    }
    v.push_back({(double)i / res, i});
  }
  for (long long i = 10000099999999; i <= 100000000000000; i += 100000000) {
    string s = to_string(i);
    int res = 0;
    for (int j = 0; j < (int)s.size(); j++) {
      res += s[j] - '0';
    }
    v.push_back({(double)i / res, i});
  }
  for (long long i = 100000099999999; i <= 1000000000000000; i += 100000000) {
    string s = to_string(i);
    int res = 0;
    for (int j = 0; j < (int)s.size(); j++) {
      res += s[j] - '0';
    }
    v.push_back({(double)i / res, i});
  }
  sort(v.begin(), v.end());
  long long now = 0;
  int cont = 0;
  for (int i = 0; i < (int)v.size(); i++) {
    if (now < v[i].second) {
      now = v[i].second;
      printf("%lld\n", v[i].second);
      cont++;
      if (cont == n) return 0;
    }
  }
  return 0;
}
