#include <bits/stdc++.h>
using namespace std;
vector<long long> ans{0};
long long dfs(long long cur, long long pow10, int d, int rem, long long bound) {
  if (!rem) {
    if (cur >= bound) return cur;
    return -1;
  }
  if ((d + 1) * 9 < rem) return -1;
  if (cur + pow10 * 10 - 1 < bound) return -1;
  for (int k = 0; k <= 9 && k <= rem; k++) {
    long long val = dfs(cur + k * pow10, pow10 / 10, d - 1, rem - k, bound);
    if (val != -1) return val;
  }
  return -1;
}
long long min_with_dsum_bound(int dsum, long long bound) {
  long long pow10 = 1;
  for (int i = 1; i <= 15; i++) pow10 *= 10;
  return dfs(0, pow10, 15, dsum, bound);
}
int main() {
  for (int s = 1; s <= 9 * 15; s++) {
    long long x = s % 9;
    for (int i = 1; i <= (s / 9); i++) x = (x * 10) + 9;
    bool flag = false;
    for (int t = 1; t < s; t++) {
      long long y = min_with_dsum_bound(t, x);
      if (y * s < x * t) {
        flag = true;
        break;
      }
    }
    if (!flag) ans.push_back(x);
  }
  int k;
  scanf("%d", &k);
  for (int i = 1; i <= k; i++) printf("%lld\n", ans[i]);
  return 0;
}
