#include <bits/stdc++.h>
using namespace std;
struct Edge {
  int from, to, cost;
  bool operator<(Edge e) { return cost < e.cost; }
};
template <class T>
using vec = vector<T>;
template <class T>
using pql = priority_queue<T, vector<T>, greater<T>>;
string debug_show(pair<int, int> a) {
  return "(" + to_string(a.first) + "," + to_string(a.second) + ")";
}
template <class T>
struct augEdge {
  T from, to;
  int cost;
  bool operator<(augEdge e) { return cost < e.cost; }
  bool operator>(augEdge e) { return cost > e.cost; }
};
template <class T>
using augGraph = vector<augEdge<T>>;
int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  int k;
  cin >> k;
  int t = 0;
  long long i = 0;
  int j = 0;
  bool f = false;
  if (k < 10) {
    for (int i = (int)(1); i < (int)(10); i++) {
      long long a = (long long)powl(10, j) * i;
      cout << a << endl;
      t++;
      if (t >= k) f = true;
      if (f) break;
    }
  }
  while (t < k) {
    for (int i = (int)(2); i < (int)(11); i++) {
      long long a = (long long)powl(10, j) * i - 1;
      cout << a << endl;
      t++;
      if (t >= k) f = true;
      if (f) break;
    }
    if (f) break;
    j++;
  }
  return 0;
}
