#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
const long long INFL = 0x3f3f3f3f3f3f3f3fLL;
const double EPS = 1e-9;
const int DX[] = {1, 0, -1, 0}, DY[] = {0, -1, 0, 1};
double snuke_number(long long check) {
  long long tmp = check;
  long long S = 0;
  while (check != 0) {
    S += check % 10;
    check /= 10;
  }
  return tmp / (double)S;
}
void solve(long long K) {
  vector<long long> ans;
  for (int i = 1; i < (10); i++) ans.push_back(i);
  long long tmp = 0;
  for (int i = 0; i < (17); i++) {
    tmp *= 10;
    tmp += 9;
    for (int j = 1; j < (10); j++) {
      long long tmp2 = j;
      for (int k = 0; k < (i + 1); k++) tmp2 *= 10LL;
      ans.push_back(tmp2 + tmp);
    }
  }
  reverse((ans).begin(), (ans).end());
  double min_snuke_number = snuke_number(ans[0]);
  vector<long long> ans2;
  for (int i = 1; i < (ans.size()); i++) {
    double now_snuke_number = snuke_number(ans[i]);
    if (now_snuke_number <= min_snuke_number) {
      min_snuke_number = now_snuke_number;
      ans2.push_back(ans[i]);
    }
  }
  reverse((ans2).begin(), (ans2).end());
  for (int i = 0; i < (K); i++) {
    cout << ans2[i] << endl;
  }
}
int main() {
  long long K;
  scanf("%lld", &K);
  solve(K);
  return 0;
}
