from functools import partial
from operator import le
class Stack:
def __init__(self):
self.stack = []
def IsEmpty(self):
return not self.stack
def Peek(self):
return self.stack[-1]
def Pop(self):
return self.stack.pop()
def Push(self, value):
self.stack.append(value)
class Queue:
def __init__(self):
self.popper = Stack()
self.pusher = Stack()
def Dequeue(self):
while not self.pusher.IsEmpty():
self.popper.Push(self.pusher.Pop())
return self.popper.Pop()
def Enqueue(self, value):
while not self.popper.IsEmpty():
self.pusher.Push(self.popper.Pop())
self.pusher.Push(value)
def IsEmpty(self):
return self.popper.IsEmpty() and self.pusher.IsEmpty()
esthetic = set()
q = Queue()
for n in range(1, 10):
q.Enqueue(n)
while not q.IsEmpty():
n = q.Dequeue()
if n < 10000 and n not in esthetic:
esthetic.add(n)
d = n % 10
if d != 0:
q.Enqueue(n * 10 + d - 1)
if d != 9:
q.Enqueue(n * 10 + d + 1)
print(*sorted(filter(partial(le, 1000), esthetic)), sep="\n")
ZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHBhcnRpYWwKZnJvbSBvcGVyYXRvciBpbXBvcnQgbGUKCgoKY2xhc3MgU3RhY2s6CgogICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAgICAgIHNlbGYuc3RhY2sgPSBbXQoKICAgIGRlZiBJc0VtcHR5KHNlbGYpOgogICAgICAgIHJldHVybiBub3Qgc2VsZi5zdGFjawoKICAgIGRlZiBQZWVrKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLnN0YWNrWy0xXQoKICAgIGRlZiBQb3Aoc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYuc3RhY2sucG9wKCkKCiAgICBkZWYgUHVzaChzZWxmLCB2YWx1ZSk6CiAgICAgICAgc2VsZi5zdGFjay5hcHBlbmQodmFsdWUpCgoKCmNsYXNzIFF1ZXVlOgoKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBzZWxmLnBvcHBlciA9IFN0YWNrKCkKICAgICAgICBzZWxmLnB1c2hlciA9IFN0YWNrKCkKCiAgICBkZWYgRGVxdWV1ZShzZWxmKToKICAgICAgICB3aGlsZSBub3Qgc2VsZi5wdXNoZXIuSXNFbXB0eSgpOgogICAgICAgICAgICBzZWxmLnBvcHBlci5QdXNoKHNlbGYucHVzaGVyLlBvcCgpKQogICAgICAgIHJldHVybiBzZWxmLnBvcHBlci5Qb3AoKQoKICAgIGRlZiBFbnF1ZXVlKHNlbGYsIHZhbHVlKToKICAgICAgICB3aGlsZSBub3Qgc2VsZi5wb3BwZXIuSXNFbXB0eSgpOgogICAgICAgICAgICBzZWxmLnB1c2hlci5QdXNoKHNlbGYucG9wcGVyLlBvcCgpKQogICAgICAgIHNlbGYucHVzaGVyLlB1c2godmFsdWUpCgogICAgZGVmIElzRW1wdHkoc2VsZik6CiAgICAgICAgcmV0dXJuIHNlbGYucG9wcGVyLklzRW1wdHkoKSBhbmQgc2VsZi5wdXNoZXIuSXNFbXB0eSgpCgoKCmVzdGhldGljID0gc2V0KCkKCnEgPSBRdWV1ZSgpCgpmb3IgbiBpbiByYW5nZSgxLCAxMCk6CiAgICBxLkVucXVldWUobikKCndoaWxlIG5vdCBxLklzRW1wdHkoKToKICAgIG4gPSBxLkRlcXVldWUoKQogICAgaWYgbiA8IDEwMDAwIGFuZCBuIG5vdCBpbiBlc3RoZXRpYzoKICAgICAgICBlc3RoZXRpYy5hZGQobikKICAgICAgICBkID0gbiAlIDEwCiAgICAgICAgaWYgZCAhPSAwOgogICAgICAgICAgICBxLkVucXVldWUobiAqIDEwICsgZCAtIDEpCiAgICAgICAgaWYgZCAhPSA5OgogICAgICAgICAgICBxLkVucXVldWUobiAqIDEwICsgZCArIDEpCgoKCnByaW50KCpzb3J0ZWQoZmlsdGVyKHBhcnRpYWwobGUsIDEwMDApLCBlc3RoZXRpYykpLCBzZXA9IlxuIik=