#include <bits/stdc++.h>
using namespace std;
template <class T>
int sign(const T &a) {
  if (a == 0) return 0;
  if (a > 0) return 1;
  return -1;
}
template <class T>
inline T min(T a, T b, T c) {
  return min(min(a, b), c);
}
template <class T>
inline T max(T a, T b, T c) {
  return max(max(a, b), c);
}
template <class T>
void Min(T &a, const T &b) {
  a = min(a, b);
}
template <class T>
void Max(T &a, const T &b) {
  a = max(a, b);
}
template <typename T>
void println(const T &t) {
  cout << t << '\n';
}
template <typename T, typename... Args>
void println(const T &t, const Args &...rest) {
  cout << t << ' ';
  println(rest...);
}
template <typename T>
void print(const T &t) {
  cout << t << ' ';
}
template <typename T, typename... Args>
void print(const T &t, const Args &...rest) {
  cout << t;
  print(rest...);
}
template <class T>
void scan(T &t) {
  cin >> t;
}
template <class T, class... Args>
void scan(T &a, Args &...rest) {
  cin >> a;
  scan(rest...);
}
int cas;
const double pi = acos(-1);
int mod = 1e9 + 7;
template <class T>
void add_mod(T &a, const T &b) {
  a += b;
  if (a >= mod) a -= mod;
}
using ll = long long;
using ull = unsigned long long;
using vec = vector<ll>;
using mat = vector<vec>;
using pii = pair<int, int>;
using pdd = pair<double, double>;
using pip = pair<int, pii>;
using szt = size_t;
using vi = vector<int>;
using vb = vector<bool>;
mat operator*(const mat &a, const mat &b) {
  mat c(a.size(), vec(b[0].size()));
  for (int i = 0; i < a.size(); i++) {
    for (int j = 0; j < a[0].size(); j++) {
      if (a[i][j]) {
        for (int k = 0; k < b[0].size(); k++) {
          add_mod(c[i][k], a[i][j] * b[j][k] % mod);
        }
      }
    }
  }
  return c;
}
vec operator*(const mat &a, const vec &b) {
  vec c(a.size());
  for (int i = 0; i < a.size(); i++) {
    for (int j = 0; j < a[0].size(); j++) {
      add_mod(c[i], a[i][j] * b[j] % mod);
    }
  }
  return c;
}
mat pow(mat a, ull n) {
  mat res(a.size(), vec(a[0].size()));
  for (int i = 0; i < a.size(); i++) {
    res[i][i] = 1;
  }
  while (n) {
    if (n & 1) {
      res = res * a;
    }
    a = a * a;
    n >>= 1;
  }
  return res;
}
ll POW(ll x, ll n) {
  ll res = 1;
  for (; n; n /= 2, x *= x, x %= mod) {
    if (n & 1) {
      res *= x;
      res %= mod;
    }
  }
  return res;
}
ll inv(ll x) { return POW(x, mod - 2); }
void rotate(double &x, double &y, double theta) {
  double tx = cos(theta) * x - sin(theta) * y;
  double ty = sin(theta) * x + cos(theta) * y;
  x = tx, y = ty;
}
const int BIT_N = 1e5 + 5;
int bit[BIT_N];
int sum(int x) {
  int res = 0;
  while (x) {
    res += bit[x];
    x -= x & -x;
  }
  return res;
}
int sum(int l, int r) {
  if (l > r) return 0;
  return sum(r) - sum(l - 1);
}
void add(int x, int v, int n) {
  while (x <= n) {
    bit[x] += v;
    x += x & -x;
  }
}
const ll INF = LLONG_MAX / 10;
const int M = 3000 + 5;
using dvec = vector<double>;
using dmat = vector<dvec>;
const int N = 2e3 + 5;
int ans[50][50];
int main() {
  ios::sync_with_stdio(false);
  vector<ll> a;
  for (int i = 1; i < 10; i++) {
    a.push_back(i);
  }
  ll x = 1;
  for (int i = 1; i < 15; i++) {
    x *= 10;
    for (int j = 2; j <= 10; j++) {
      a.push_back(j * x - 1);
    }
  }
  int k;
  cin >> k;
  for (int i = 0; i < k; i++) {
    println(a[i]);
  }
  return 0;
}
