Код Грея: Циклический сдвиг и XOR

C++ Сложный loops

Задача «Код Грея: Циклический сдвиг и XOR»

Дано целое число N (1 ≤ N ≤ 20). Сгенерируйте последовательность из 2^N чисел, представляющих собой код Грея для чисел от 0 до 2^N-1. Затем для каждого числа в этой последовательности выполните циклический сдвиг его двоичного представления вправо на 1 бит и примените операцию XOR с исходным числом. Выведите полученные значения в порядке возрастания исходных чисел. Используйте только циклы и битовые операции, избегая рекурсии.

Формат ввода

Одно целое число N (1 ≤ N ≤ 20).

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

2^N целых чисел, разделённых пробелами, каждое на новой строке.

Примеры

Пример 1

ВВОД
3 1 2 3 4 5 6 7 8 9
ВЫВОД
15

Пример 2

ВВОД
1 5
ВЫВОД
1 2 4 8 16

Пример 3

ВВОД
5 1 2 3 4 5 2 3
ВЫВОД
12

Пример 4

ВВОД
3
ВЫВОД
1 0 0 2 0 4 4 6
main.cpp