AND
시간 제한2초메모리 제한512 MB
주어진 수 집합에 대해, 모든 부분 배열의 비트 AND 값 집합이 정확히 그 집합이 되는 배열을 만들거나, 불가능하면 -1을 출력한다.
문제
당신에게는 배열 가 있었다. 그다음 당신은 원래 배열의 모든 부분 배열에 대한 비트wise AND를 계산했다. 공식적으로, 인 모든 AND AND AND 형태의 수를 계산했다.
당신은 이렇게 나온 모든 수의 집합을 기억하고 있다. 어떤 수가 이 집합에 속한다는 것은 그 수가 적어도 하나의 부분 배열의 비트wise AND로 표현될 수 있다는 것과 같다. 안타깝게도 당신은 원래 배열을 잊어버렸다.
주어진 부분 배열 AND들의 집합을 만들어 내는 배열 를 아무거나 하나 찾거나, 그러한 배열이 존재하지 않는다고 판정하시오.
입력
첫 번째 줄에는 테스트 케이스의 수를 나타내는 정수 가 주어진다 ().
각 테스트 케이스의 첫 번째 줄에는 주어진 집합의 크기를 나타내는 정수 이 주어진다 ().
각 테스트 케이스의 두 번째 줄에는 집합의 원소 개 이 주어진다 (). 모든 원소는 서로 다름이 보장된다.
모든 테스트 케이스에 대한 의 합은 을 넘지 않음이 보장된다.
출력
각 테스트 케이스에 대해, 그러한 배열이 존재하지 않으면 을 출력한다.
그렇지 않으면 첫 번째 줄에 원래 배열의 크기 를 출력한다 ().
다음 줄에 배열의 원소 개 를 출력한다 ().
가능한 답이 여러 개라면 아무거나 하나 출력한다.
적어도 하나의 배열이 존재한다면, 이 조건을 만족하는 배열이 존재함을 보일 수 있다.
힌트
출력하는 배열의 원소는 서로 달라도 되고 같아도 된다.