#include <bits/stdc++.h>
using namespace std;

#ifdef Hwang_Baek_I
#define debug(args...) { string _102_ = #args; error(_102_.begin(), _102_.end(), args); }
void error(string::iterator it, string::iterator IT);
template<typename T, typename... Args>
void error(string::iterator it, string::iterator IT, T a, Args... args);
#else
#define debug(args...) 102
#endif

const int N = 110000;

pair<int, int> a[N];

int f(int x) {
	if (x < 10) return x;
	return x % 10 + f(x / 10);
}

int b[20];

long long calc(int sum, long long t) {
	t--;
	for (int i = 0; i < 20; i++) b[i] = t % 10, t /= 10;
	reverse(b, b + 20);
	for (int i = 19; i >= 0; i--) {
		for (int j = b[i] + 1; j <= 9; j++) {
			int now = j;
			for (int k = 0; k < i; k++) now += b[k];
			if (now > sum) continue;
			if ((19 - i) * 9 >= sum - now) {
				b[i] = j;
				now = sum - now;
				for (int ii = 19; ii > i; ii--) {
					b[ii] = min(now, 9);
					now -= b[ii];
				}
				long long ret = 0;
				for (int ii = 0; ii < 20; ii++) ret = ret * 10 + b[ii];
				return ret;
			}
		}
	}
}

int main() {
#ifdef Hwang_Baek_I
	freopen("in.txt", "r", stdin);
	freopen("out.txt", "w", stdout);
#endif
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	for (int i = 1; i < N; i++) a[i] = {i, f(i)};
	pair<int, int> Max = {1e9, 1};
	for (int i = N - 1; i >= 1; i--) {
		if ((long long)a[i].first * Max.second <= (long long)Max.first * a[i].second) {
			debug(i, a[i]);
			Max = a[i];
		}
	}
	vector<long long> v;
	v.push_back(1);
	long long st = 2;
	while (1) {
		pair<long long, long long> Max = {1e18, 1};
		for (int i = 1; i <= 135; i++) {
			long long now = calc(i, st);
			if ((long long)now * Max.second < (long long)Max.first * i) {
				Max = {now, i};
			} else if ((long long)now * Max.second == (long long)Max.first * i) {
				Max = min(Max, {now, i});
			}
		}
		v.push_back(Max.first);
//		debug(Max.first);
		st = Max.first + 1;
		if (Max.first > 1.1e15) break;
	}
	debug(v.size());
	int k; cin >> k;
	for (int i = 0; i < k; i++) cout << v[i] << endl;
	return 0;
}









#ifdef Hwang_Baek_I
string to_string(const string &s) { return '"' + s + '"'; }
string to_string(const char* s) { return to_string((string)s); }
template<int N>
string to_string(bitset<N> v) { string res = ""; for (int i = 0; i < N; i++) res += ('0' + v[i]); return res; }
string to_string(char x) { string ret = ""; ret.push_back(x); return ret; }
template<typename T>
string to_string(T x) { string ret = ""; for (auto it : x) ret += to_string(it) + ", "; ret.pop_back(); ret.pop_back(); return ret; }
template<typename T, typename U>
string to_string(pair<T, U> p) { return "(" + to_string(p.first) + ", " + to_string(p.second) + ")"; }
template<typename T, typename U, typename V>
string to_string(tuple<T, U, V> p) { return "(" + to_string(get<0>(p)) + ", " + to_string(get<1>(p)) + ", " + to_string(get<2>(p)) + ")"; }
template <typename T, typename U, typename V, typename W>
string to_string(tuple<T, U, V, W> p) { return "(" + to_string(get<0>(p)) + ", " + to_string(get<1>(p)) + ", " + to_string(get<2>(p)) + ", " + to_string(get<3>(p)) + ")";}
void error(string::iterator it, string::iterator IT) { cerr << endl; }
template<typename T, typename... Args>
void error(string::iterator it, string::iterator IT, T a, Args... args) {
	cerr << "<";
	int cnt = 0;
	while (it != IT) {
		if (*it == '(' || *it == '[' || *it == '<') cnt++;
		if (*it == ')' || *it == ']' || *it == '>') cnt--;
		if (cnt == 0 && *it == ',') break;
		if (*it != ' ') cerr << *it;
		it++;
	}
	cerr << " = " << to_string(a) << "> ";
	error(++it, IT, args...);
}
#endif


Measured memory_bytes: 1152