아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

AND

시간 제한2초메모리 제한512 MB

요약
주어진 수 집합에 대해, 모든 부분 배열의 비트 AND 값 집합이 정확히 그 집합이 되는 배열을 만들거나, 불가능하면 -1을 출력한다.
난이도

보통10점 중 7점

유형
비트 연산, 그리디, 수학, 구현
정답자
아직 제출이 없습니다

문제

당신에게는 배열 aa가 있었다. 그다음 당신은 원래 배열의 모든 부분 배열에 대한 비트wise AND를 계산했다. 공식적으로, 1≤i≤j≤length(a)1 \le i \le j \le \mathrm{length}(a)인 모든 a_ia\_i AND a_i+1a\_{i + 1} AND …\ldots AND a_ja\_j 형태의 수를 계산했다.

당신은 이렇게 나온 모든 수의 집합을 기억하고 있다. 어떤 수가 이 집합에 속한다는 것은 그 수가 적어도 하나의 부분 배열의 비트wise AND로 표현될 수 있다는 것과 같다. 안타깝게도 당신은 원래 배열을 잊어버렸다.

주어진 부분 배열 AND들의 집합을 만들어 내는 배열 aa를 아무거나 하나 찾거나, 그러한 배열이 존재하지 않는다고 판정하시오.

입력

첫 번째 줄에는 테스트 케이스의 수를 나타내는 정수 tt가 주어진다 (1≤t≤1051 \le t \le 10^5).

각 테스트 케이스의 첫 번째 줄에는 주어진 집합의 크기를 나타내는 정수 nn이 주어진다 (1≤n≤1051 \le n \le 10^5).

각 테스트 케이스의 두 번째 줄에는 집합의 원소 nn개 b_1,b_2,…,b_nb\_1, b\_2, \ldots, b\_n이 주어진다 (0≤b_i≤220−10 \le b\_i \le 2^{20} - 1). 모든 원소는 서로 다름이 보장된다.

모든 테스트 케이스에 대한 nn의 합은 10510^5을 넘지 않음이 보장된다.

출력

각 테스트 케이스에 대해, 그러한 배열이 존재하지 않으면 −1-1을 출력한다.

그렇지 않으면 첫 번째 줄에 원래 배열의 크기 kk를 출력한다 (1≤k≤5n1 \le k \le 5n).

다음 줄에 배열의 원소 kk개 a_1,a_2,…,a_ka\_1, a\_2, \ldots, a\_k를 출력한다 (0≤a_i≤220−10 \le a\_i \le 2^{20} - 1).

가능한 답이 여러 개라면 아무거나 하나 출력한다.

적어도 하나의 배열이 존재한다면, 이 조건을 만족하는 배열이 존재함을 보일 수 있다.

힌트

출력하는 배열의 원소는 서로 달라도 되고 같아도 된다.

예제1

  1. 예제 1

    입력
    3
    1
    5
    3
    0 1 2
    2
    1 2
    
    예상 출력
    3
    5 5 5
    3
    1 0 2
    -1