#include <iostream>
#include <iomanip>
#include <sstream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <cctype>
#include <string>
#include <vector>
#include <list>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <algorithm>
#include <cstdio>
#include <functional>
using namespace std; 
#define DEBUG(x) cout << '>' << #x << ':' << x << endl;
#define REP(i,n) for(int i=0;i<(n);i++)
#define FOR(i,a,b) for(int i=(a);i<=(b);i++)
#define FORD(i,a,b) for(int i=(a);i>=(b);i--)
inline bool EQ(double a, double b) { return fabs(a-b) < 1e-9; }
const int INF = (((1<<30)-1)<<1)+1;
const int nINF = 1<<31;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef pair<char, int> pci;

/////////////////////////////////////////////////////////////////////

double s(ll n) {
	double res = 0;
	while(n) {
		res += (n % 10);
		n /= 10;
	}
	return res;
}

void print(int k) {
	--k;
	int d = (k % 9)+1, z = k/9;
    string ans = to_string(d)+string(z, '9');
    cout << ans << endl;
}

ll get(int k) {
	--k;
	int d = (k % 9)+1, z = k/9;
    string ans = to_string(d)+string(z, '9');
    return stoll(ans);
}

set<ll> st;

int main() {
    ios::sync_with_stdio(false);
    // cout << fixed << setprecision(7);
    // int n;
    // cin >> n;
    // FOR(i, 1, n) {
    // 	cout << i/s(i) << endl;
    // }
    // FOR(i, 1, 69) {
    // 	int l = get(i), r = get(i+1);
    // 	double ls = l/s(l), rs = r/s(r);
    // 	double mn = INF;
    // 	int idx;
    // 	FOR(j, l+1, r-1) {
    // 		double cur = j/s(j);
    // 		if(cur < mn) {
    // 			idx = j;
    // 			mn = cur;
    // 		}
    // 	}
    // 	if(mn < rs) cout << ls << ' ' << mn << ' ' << rs << ' ' << idx << endl;
    // }
    FOR(i, 1, 300) {
    	// DEBUG(i);
    	ll cur = get(i);
    	// DEBUG(cur);
    	if(cur <= 1e15) {
    		st.insert(cur);
    	} else break;
    }
    // DEBUG("here");
    FOR(i, 2, 14) {
    	FOR(j, 1, 9) {
    		string curs = to_string(10*j)+string(i, '9');
    		ll cur = stoll(curs);
    		if(cur > 1e15) break;
    		ll lb = *st.lower_bound(cur);
    		if(cur/s(cur) < lb/s(lb)) {
    			// DEBUG(cur);
    			st.insert(cur);
    		} else break;
    	}
    }
    FOR(i, 2, 14) {
		FOR(k, 10, 99) {
    		string curs = to_string(k)+string(i, '9');
    		ll cur = stoll(curs);
    		if(cur > 1e15) break;
    		auto tst = st.lower_bound(cur);
    		if(tst != st.end()) {
    			ll lb = *tst;
	    		if(cur/s(cur) < lb/s(lb)) {
	    			// DEBUG(cur);
	    			st.insert(cur);
	    		} else {
	    			//
	    		}
	    	} else st.insert(cur);
		}
    }
    FOR(i, 3, 13) {
		FOR(k, 100, 999) {
    		string curs = to_string(k)+string(i, '9');
    		ll cur = stoll(curs);
    		if(cur > 1e15) break;
    		auto tst = st.lower_bound(cur);
    		if(tst != st.end()) {
    			ll lb = *tst;
	    		if(cur/s(cur) < lb/s(lb)) {
	    			// DEBUG(cur);
	    			st.insert(cur);
	    		} else {
	    			//
	    		}
	    	} else st.insert(cur);
		}
    }
    // auto nxt = st.begin();
    // auto itr = nxt++;
    // while(nxt != st.end()) {
    // 	ll l = *itr, r = *nxt;
    // 	double left = l/s(l), right = r/s(r);
    // 	if(right < left) cout << l << ' ' << r << ' ' << left << ' ' << right << endl;
    // 	++itr, ++nxt;
    // }

    // auto nxt = st.begin();
    // auto itr = nxt++;
    // while(nxt != st.end()) {
    // 	ll l = *itr, r = *nxt;
    // 	ll idx;
    // 	double mn = INF;
    // 	FOR(i, l+1, r-1) {
    // 		double cur = i/s(i);
    // 		if(cur < mn) {
    // 			idx = i;
    // 			mn = cur;
    // 		}
    // 	}
    // 	if(mn < r/s(r)) {
    // 		cout << l/s(l) << ' ' << mn << ' ' << r/s(r) << ' ' << idx << endl;
    // 	}
    // 	else cout << *itr << " GOOD" << endl;
    // 	++itr, ++nxt;
    // }

    // DEBUG("ppdone");

    int k;
    cin >> k;
    for(auto& x : st) {
    	cout << x << endl;
    	--k;
    	if(!k) break;
    }
    // FOR(i, 1, k) {
    // 	print(i);
    // }


    return 0;
}

Measured memory_bytes: 256