XOR 기계

아직 제출이 없습니다시간 제한1초메모리 제한1024 MB

문제

cs71107은 신기한 기계를 발견했다. 기계에는 11번부터 NN번까지 번호가 붙어있는 NN 개의 버튼과 수를 표시하는 장치가 하나 있다. 처음에는 00이 표시되어 있다.

cs71107은 버튼을 누를 때마다 표시되는 수가 특정한 규칙에 따라 변한다는 사실을 알아냈다. 기존에 표시되는 수를 XX라고 할 때, ii번 버튼을 누르면 표시되는 수가 XA_iX \oplus A\_{i}, 즉 XXA_iA\_{i}의 bitwise XOR로 변한다는 사실을 알아냈다.

버튼을 몇 개씩 눌러보던 중 cs71107은 표시되는 수로 서로 다른 수를 최대한 많이 만들고 싶다고 생각했다. 단, 아무 방법으로만 만들면 재미없다고 생각해서 버튼을 최대한 적게, 또 그런 방법이 여러 개라면 누른 버튼의 번호로 이루어진 수열이 사전 순으로 가장 앞선 방법으로 누르고 싶었다.

안타깝게도 cs71107은 이 문제를 해결할 수 있을 정도로 똑똑하지 않다. 여러분이 cs71107을 도와서 문제를 해결해 주자!

입력

첫 번째 줄에 NN이 주어진다.

두 번째 줄에 NN개의 정수 A_1,A_2,,A_NA\_1,A\_2, \cdots , A\_N이 공백으로 구분되어 주어진다.

출력

첫째 줄에 서로 다른 수를 최대한 많이 만들기 위해 버튼을 눌러야 하는 최소 횟수인 KK를 출력한다.

두 번째 줄부터 KK 개의 줄을 출력한다. 이 중 ii 번째 줄에는 ii 번째로 눌러야 하는 버튼의 번호를 출력한다. 가능한 답이 여럿 있으면 사전 순으로 가장 앞서는 답을 출력한다.

제한

  • 1N1001 \leq N \leq 100
  • 0<A_i<2200 < A\_{i} < 2^{20}
  • 입력으로 주어지는 모든 수는 정수이다.

힌트

  • aabb의 bitwise XOR인 aba \oplus b는, 2진법으로 표현했을 때 aabbii 번째 자리가 같으면 aba \oplus bii 번째 자리가 00이고, 서로 다르면 11이 되도록 계산한다.
  • 수열 A_1,A_2,,A_KA\_1, A\_2, \cdots, A\_KB_1,B_2,,B_KB\_1, B\_2, \cdots, B\_K보다 사전 순으로 앞선다는 의미는, 11 이상 KK 이하의 정수 ii가 존재해서, A_1=B_1,A_2=B_2,,A_i1=B_i1A\_1 = B\_1, A\_2 = B\_2, \cdots, A\_{i-1} = B\_{i-1}이고, A_i<B_iA\_i < B\_i임을 의미한다.