Сортировка по ключу с удалением дубликатов

C++ Сложный sorting

Задача «Сортировка по ключу с удалением дубликатов»

Дан массив целых чисел. Необходимо отсортировать его по возрастанию, удалив все повторяющиеся значения, но с одним условием: если число встречается более одного раза, то после удаления дубликатов его порядковый номер в отсортированном массиве (индекс с нуля) должен быть равен количеству его вхождений в исходном массиве минус один. Другими словами, для каждого уникального значения x, которое встречается k раз в исходном массиве, в результирующем массиве должно быть ровно одно вхождение x, и его индекс должен быть равен k-1. Если для какого-то x это невозможно (например, индекс выходит за границы массива или уже занят другим числом), то такое x не включается в результат. Гарантируется, что для всех чисел, которые нужно включить, условие выполнимо. Выведите итоговый массив, отсортированный по возрастанию.

Формат ввода

Первая строка: целое число n (1 ≤ n ≤ 10^5) — количество элементов. Вторая строка: n целых чисел, по модулю не превышающих 10^9, разделенных пробелами.

Формат вывода

В первой строке выведите число m — количество элементов в итоговом массиве. Во второй строке выведите m целых чисел в порядке возрастания.

Примеры

Пример 1

ВВОД
6 3 1 2 2 3 1
ВЫВОД
1 3

Пример 2

ВВОД
5 5 5 5 5 5
ВЫВОД
1 5

Пример 3

ВВОД
5 Математика Иванов 101 2 3 Физика Петров 202 3 2 Математика Иванов 101 2 3 Химия Сидоров 303 4 1 Физика Петров 202 3 2
ВЫВОД
3 Математика Иванов 101 2 3 Физика Петров 202 3 2 Химия Сидоров 303 4 1

Пример 4

ВВОД
7 4 2 4 2 4 2 4
ВЫВОД
2 2 4

Пример 5

ВВОД
3 Алгебра Смирнов 105 1 1 Алгебра Смирнов 105 1 1 Геометрия Смирнов 105 1 2
ВЫВОД
2 Алгебра Смирнов 105 1 1 Геометрия Смирнов 105 1 2
main.cpp