# http://c...content-available-to-author-only...e.com/q/73513/34718

class gen():
	"generates a pattern for a singly lossy list"
	def __init__(self):
		#self.list = [0, 1, 2]
		#self.max = 2
		self.list = [0, 1]
		self.max = 1
		self.skip = 1
		self.value = None
	
	def next(self):
		self.skip -= 1
		if self.skip == 0:
			self.max += 1
			self.list.append(self.max)
			self.skip = self.max - 1
		self.value = [x for x in self.list if x != self.skip]
		return self


class lossy_part():
	"generates a subsequence for the singly lossy integers"
	def __init__(self, seq):
		self.seq = seq
		self.n = 0
		self.value = None
	
	def next(self):
		self.n += 1
		self.value = int("".join(str(x + self.n) for x in self.seq))
		return self


class singly_lossy():
	"generates the singly lossy integer sequence"
	def __init__(self, keep):
		self.keep = bool(keep)
		self.gen = gen()
		self.subseq = []
		self.add_seq()
		self.index = -1
		self.value = None
		self.values = []
	
	def add_seq(self):
		self.subseq.append(lossy_part(self.gen.next().value).next())
	
	def next(self):
		self.index += 1
		# get the next highest value in the sequence and which subsequence it's in
		seq = self.subseq[0]
		min = seq.value
		for x in self.subseq:
			if x.value <= min:
				seq = x
				min = seq.value
		
		# the next value in the sequence
		self.value = seq.value
		if self.keep:
			self.values.append(self.value)
		
		# add another subsequence?
		if seq.n == 1:
			self.add_seq()
		
		# move subseq to next
		seq.next()
		return self

#g = gen()
#for i in xrange(10):
#	g.next()
#	print g.value, ":",
#	p = lossy_part(g.value)
#	for j in xrange(5):
#		p.next()
#		print p.value,
#	print p.value

# set bool to True to have s.values maintain the complete list
s = singly_lossy(False)
for x in xrange(50):
	print s.next().value,
print