Ordenação por chave com remoção de duplicatas

C++ Hard sorting

Tarefa «Ordenação por chave com remoção de duplicatas»

Dado um array de números inteiros. É necessário ordená-lo em ordem crescente, removendo todos os valores repetidos, mas com uma condição: se um número aparece mais de uma vez, após a remoção das duplicatas, seu índice no array ordenado (índice baseado em zero) deve ser igual ao número de suas ocorrências no array original menos um. Em outras palavras, para cada valor único x que aparece k vezes no array original, deve haver exatamente uma ocorrência de x no array resultante, e seu índice deve ser igual a k-1. Se para algum x isso for impossível (por exemplo, o índice ultrapassa os limites do array ou já está ocupado por outro número), então esse x não é incluído no resultado. É garantido que, para todos os números que devem ser incluídos, a condição é satisfeita. Imprima o array final, ordenado em ordem crescente.

Formato de Entrada

Primeira linha: um número inteiro n (1 ≤ n ≤ 10^5) — a quantidade de elementos. Segunda linha: n números inteiros, cujo valor absoluto não excede 10^9, separados por espaços.

Formato de Saída

Na primeira linha, imprima o número m — a quantidade de elementos no array final. Na segunda linha, imprima m números inteiros em ordem crescente.

Exemplos

Exemplo 1

ENTRADA
6 3 1 2 2 3 1
SAÍDA
1 3

Exemplo 2

ENTRADA
5 5 5 5 5 5
SAÍDA
1 5

Exemplo 3

ENTRADA
5 Математика Иванов 101 2 3 Физика Петров 202 3 2 Математика Иванов 101 2 3 Химия Сидоров 303 4 1 Физика Петров 202 3 2
SAÍDA
3 Математика Иванов 101 2 3 Физика Петров 202 3 2 Химия Сидоров 303 4 1

Exemplo 4

ENTRADA
7 4 2 4 2 4 2 4
SAÍDA
2 2 4

Exemplo 5

ENTRADA
3 Алгебра Смирнов 105 1 1 Алгебра Смирнов 105 1 1 Геометрия Смирнов 105 1 2
SAÍDA
2 Алгебра Смирнов 105 1 1 Геометрия Смирнов 105 1 2
main.cpp