Problem: You are given a set of n segments on the axis Ox, each segment has integer endpoints between 1 and m inclusive. Segments may intersect, overlap or even coincide with each other. Each segment is characterized by two integers l_i and r_i (1 ≤ l_i ≤ r_i ≤ m) — coordinates of the left and of the right endpoints. 

Consider all integer points between 1 and m inclusive. Your task is to print all such points that don't belong to any segment. The point x belongs to the segment [l; r] if and only if l ≤ x ≤ r.

Input

The first line of the input contains two integers n and m (1 ≤ n, m ≤ 100) — the number of segments and the upper bound for coordinates.

The next n lines contain two integers each l_i and r_i (1 ≤ l_i ≤ r_i ≤ m) — the endpoints of the i-th segment. Segments may intersect, overlap or even coincide with each other. Note, it is possible that l_i=r_i, i.e. a segment can degenerate to a point.

Output

In the first line print one integer k — the number of points that don't belong to any segment.

In the second line print exactly k integers in any order — the points that don't belong to any segment. All points you print should be distinct.

If there are no such points at all, print a single integer 0 in the first line and either leave the second line empty or do not print it at all.

Examples

Input

3 5
2 2
1 2
5 5


Output

2
3 4 


Input

1 7
1 7


Output

0

Note

In the first example the point 1 belongs to the second segment, the point 2 belongs to the first and the second segments and the point 5 belongs to the third segment. The points 3 and 4 do not belong to any segment.

In the second example all the points from 1 to 7 belong to the first segment.

Solution (in PYTHON3):

Solution:
def parse_input(text):
    split_text = text.split(" ")
    return {'quantity': split_text[0], 'maximum': split_text[1]}


def populate_numbers_array(array, start_value, final_value):
    for num in range(start_value, final_value+1):
        if num not in array:
            array.append(num)
    array.sort()

def main():
    first_input = input()
    parsed_input = parse_input(first_input)
    lines_quantity = int(parsed_input['quantity'])
    maximum_value = int(parsed_input['maximum'])
    numbers_array = []
    for index in range(0, lines_quantity):
        second_input = input()
        split_second_input = second_input.split(" ")
        start_value = int(split_second_input[0])
        final_value = int(split_second_input[1])
        populate_numbers_array(numbers_array, start_value, final_value)
    all_numbers_in_range  = []
    populate_numbers_array(all_numbers_in_range, 1, maximum_value)
    result = ""
    numbers_missing_quantity = 0
    for num in all_numbers_in_range:
        if num not in numbers_array:
            numbers_missing_quantity += 1
            result += str(num) + " "
    print(numbers_missing_quantity)
    print(result)
    return


if __name__ == '__main__':
    main()