blobblush
시간 제한1초메모리 제한1024 MB
1부터 N까지의 수 중 일부를 골라 XOR이 최대가 되게 하고, 그중 카드 수가 최소이며 사전순으로 가장 작은 집합을 오름차순으로 출력한다.
문제
귀여운 아기 주환이에게는 부터 까지의 양의 정수가 적힌 숫자 카드가 있다.
주환이는 오늘이 자신과 가장 친한 아기 블롭의 생일이라는 사실을 알고, 선물로 장의 카드를 주었다.

주환이는 카드를 다음 조건에 맞게 뽑았다.
- 뽑은 카드에 적힌 수를 모두 ⊕한 값이 최대가 되어야 한다. ⊕는 배타적 논리합(xor)을 의미한다.
- 첫 번째 조건에 맞게 카드를 뽑는 방법이 여러 가지인 경우, 카드를 최대한 적게 뽑아야 한다.
- 두 번째 조건에 맞게 카드를 뽑는 방법이 여러 가지인 경우, 사전 순으로 가장 앞서도록 뽑아야 한다.
와 고른 카드에 적힌 각 수를 구하자.
입력
첫째 줄에 이 주어진다.
출력
첫째 줄에 를 출력한다. 는 이하인 양의 정수이다.
둘째 줄부터 조건을 만족하는 개의 카드에 적힌 양의 정수를 한 줄에 하나씩 오름차순으로 출력한다.
가능한 답이 여러 경우라면, 사전 순으로 가장 앞서는 것을 출력한다.
제한
힌트
길이 K의 수열 A가 같은 길이의 수열 B보다 사전순으로 앞선다는 것은, A의 1~(i-1)번째 원소와 B의 1~(i-1)번째 원소가 같으면서, A의 i번째 원소가 B의 i번째 원소보다 작은 i가 있다는 것이다.