Problem:
Score : 500 points

Problem Statement

Let S(n) denote the sum of the digits in the decimal notation of n.
For example, S(123) = 1 + 2 + 3 = 6.

We will call an integer n a Snuke number when, for all positive integers m such that m > n, \frac{n}{S(n)} \leq \frac{m}{S(m)} holds.

Given an integer K, list the K smallest Snuke numbers.

Constraints

1 \leq K

The K-th smallest Snuke number is not greater than 10^{15}.

Input

Input is given from Standard Input in the following format:

K

Output

Print K lines. The i-th line should contain the i-th smallest Snuke number.

Sample Input 1

10

Sample Output 1

1
2
3
4
5
6
7
8
9
19

Solution in C++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

#include <bits/stdc++.h>

#define _overload(_1,_2,_3,name,...) name
#define _rep(i,n) _range(i,0,n)
#define _range(i,a,b) for(int i=int(a);i<int(b);++i)
#define rep(...) _overload(__VA_ARGS__,_range,_rep,)(__VA_ARGS__)

#define _rrep(i,n) _rrange(i,n,0)
#define _rrange(i,a,b) for(int i=int(a)-1;i>=int(b);--i)
#define rrep(...) _overload(__VA_ARGS__,_rrange,_rrep,)(__VA_ARGS__)

#define _all(arg) begin(arg),end(arg)
#define uniq(arg) sort(_all(arg)),(arg).erase(unique(_all(arg)),end(arg))
#define getidx(ary,key) lower_bound(_all(ary),key)-begin(ary)
#define clr(a,b) memset((a),(b),sizeof(a))
#define bit(n) (1LL<<(n))
#define popcount(n) (__builtin_popcountll(n))

using namespace std;

template<class T>bool chmax(T &a, const T &b) { return (a<b)?(a=b,1):0;}
template<class T>bool chmin(T &a, const T &b) { return (b<a)?(a=b,1):0;}

using ll=long long;
using R=long double;
const R EPS=1e-9L; // [-1000,1000]->EPS=1e-8 [-10000,10000]->EPS=1e-7
inline int sgn(const R& r){return(r > EPS)-(r < -EPS);}
inline R sq(R x){return sqrt(max(x,0.0L));}

const int dx[8]={1,0,-1,0,1,-1,-1,1};
const int dy[8]={0,1,0,-1,1,1,-1,-1};

// Problem Specific Parameter:

ll cmin[145];
vector<ll> ans;
const ll inf = 1LL << 60;

ll calc(int m){
	string ret = "";
	while(m >= 10){
		ret += '9';
		m -= 9;
	}
	
	ret += char(m + '0');
	reverse(begin(ret),end(ret));
	return stoll(ret);
}

ll get_next(ll val){
	string ret = to_string(val);
	const int m = ret.size();
	int idx = -1;

	rep(i,m-1) if(ret[i] != '9' and ret[i+1] != '0') idx = i;

	if(idx == -1){
		ret = "0" + ret;
		idx = 0;
	}

	ret[idx]++,ret[idx+1]--;
	
	return stoll(ret);
}

int main(void){
	const int limit = 135;
	rep(i,1,limit) cmin[i] = calc(i);

	rep(i,1,limit){
		ll cur = cmin[i];
		while(1){
			if(1LL * cur * (i + 1) > 1LL * cmin[i+1] * i) break;
			ans.push_back(cur);
			cur = get_next(cur);
		}
	}

	int k;
	cin >> k;
	rep(i,k) cout << ans[i] << endl;

	return 0;
}