# Задача:
# По данным n отрезкам необходимо найти множество точек минимального размера,
# для которого каждый из отрезков содержит хотя бы одну из точек.
#
# В первой строке дано число 1≤n≤100 отрезков.
# Каждая из последующих n строк содержит по два числа 0≤l≤r≤109, задающих начало и конец отрезка.
# Выведите оптимальное число m точек и сами m точек.
# Если таких множеств точек несколько, выведите любое из них.
# Sample Input 1:
#
# 3
# 1 3
# 2 5
# 3 6
# Sample Output 1:
#
# 1
# 3
# Sample Input 2:
#
# 4
# 4 7
# 1 3
# 2 5
# 5 6
# Sample Output 2:
#
# 2
# 3 6


otr = []
# Вводим количество отрезков
n = int(input())
# Заполняем otr отдельнами отрезками [[3,4],[5,6]]
for i in range(n):
    otr.append([int(i) for i in input().split()])


# Сортировка списка от наименьшего правого конца до наибольшего правого
otr = sorted(otr, key=lambda item: item[1])

# Сразу добавляем правый конец первого отрезка для сравнения следующего
all_dots = [otr[0][1]]

for i in range(n-1):
    # Если начало следующего отрезка больше чем текущее значение, то добавляем новое значение
    # Следующее значение соответственно будет сравниваться с новым по последнему элементу[-1]
    if all_dots[-1] < otr[i+1][0]:
        all_dots.append(otr[i+1][1])

# Выводим длину отрезка и все элементы
l = len(all_dots)
print(l)

for i in range(l):
    print(all_dots[i], end=' ')