#include <bits/stdc++.h>
using namespace std;
int a[16], b[16];
int f[16][15 * 9 + 1][2];
int dp(int pos, int sum, bool ok) {
  if (pos == 16) {
    if (sum == 0)
      return 1;
    else
      return 10;
  }
  if (f[pos][sum][ok] != -1) return f[pos][sum][ok];
  int s = 0;
  if (!ok) {
    s = a[pos];
  } else
    s = 0;
  int res = 10;
  for (int i = s; i <= min(9, sum); i++) {
    if (dp(pos + 1, sum - i, ok | (i > a[pos])) != 10) {
      res = i;
      break;
    }
  }
  f[pos][sum][ok] = res;
  return res;
}
long long call(long long lastN, long long lastS, long long sum) {
  if (sum == lastS) {
    lastN++;
  }
  long long t = (lastN * sum / lastS);
  if (lastN * sum % lastS != 0) {
    t++;
  }
  if (t < lastN) t = lastN + 1;
  int cnt = 0;
  memset(a, 0, sizeof(a));
  memset(b, 0, sizeof(b));
  while (t > 0) {
    b[cnt++] = t % 10;
    t /= 10;
  }
  for (int i = 0; i < cnt; i++) {
    a[15 - i] = b[i];
  }
  memset(f, -1, sizeof(f));
  long long res = 0;
  bool ok = false;
  for (int i = 0; i < 16; i++) {
    int t = dp(i, sum, ok);
    if (t == 10) return 0;
    res = (res * 10) + t;
    ok = (ok | t < a[i]);
    sum -= t;
  }
  return res;
}
long long getsum(long long x) {
  int res = 0;
  while (x) {
    res += (x % 10);
    x /= 10;
  }
  return res;
}
long long getNext(long long lastN, long long lastS) {
  long long N = 1e16;
  long long S = 1;
  for (int i = max(1, (int)lastS - 10); i <= min(15 * 9, (int)lastS + 10);
       i++) {
    long long t = call(lastN, lastS, i);
    if (t == 0) continue;
    if (t <= lastN) continue;
    if (lastN * getsum(t) > t * lastS) continue;
    if (N * getsum(t) == t * S) {
      if (t < N) {
        N = t;
        S = getsum(t);
      }
    } else {
      if (N * getsum(t) > t * S) {
        N = t;
        S = getsum(t);
      }
    }
  }
  return N;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  int k = 0;
  cin >> k;
  vector<int> res;
  res.push_back(1);
  long long lastN = 1;
  long long lastS = 1;
  cout << 1 << endl;
  k--;
  while (k--) {
    long long res = getNext(lastN, lastS);
    cout << res << endl;
    lastN = res;
    lastS = getsum(res);
  }
}
