x와 배수와 XOR (Easy)

시간 제한1초메모리 제한1024 MB

요약
음이 아닌 정수 x마다 1 < k_i < 2^31인 정수 k_i들의 XOR 합 k_i*x가 x가 되는 최소 길이 배열을 출력한다.
난이도

보통10점 중 6점

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

문제

이 문제는 굵은 글씨로 적힌 출력 조건을 제외하면 x와 배수와 XOR (Hard)와 동일한 문제이다.

전남대학교 게임개발동아리 PIMM에 놀러 온 지훈은 동아리 사람들이 수상하게 XOR을 좋아한다는 사실을 깨닫고, xx의 배수들을 적절히 XOR해서 다시 xx를 만드는 게임을 고안하였다.

지훈이 만든 게임을 플레이하기 위해서는 음이 아닌 정수 xx가 주어졌을 때, 다음 조건들을 모두 만족하는 정수 배열 \[k_1,⋯ ,k_n]\[k\_1,\cdots,k\_n]을 찾아서 출력해야 한다.

  • nn은 11 이상의 정수이다.
  • 각 k_ik\_i는 정수이며, 1<k_i<2311 \lt k\_i \lt 2^{31}이다.
  • (k_1×x)⊕⋯⊕(k_n×x)=x(k\_1\times x) \oplus \cdots \oplus (k\_n \times x)=x가 성립한다.

게임을 다 만든 지훈은 컴퓨터가 채점을 할 때 매우 비싼 연산인 곱셈 연산을 nn번이나 수행해야 한다는 사실을 깨닫고, 채점을 해야 하는 컴퓨터의 입장을 고려하여 다음과 같은 조건을 추가하였다.

  • 조건을 만족하는 배열 중에서 원소의 개수 nn이 최소인 배열을 찾고, 그 배열을 출력하라. 조건을 만족하는 배열이 여러 개라면, 그중 아무거나 출력해도 된다.

지훈이 만든 게임을 플레이해 보자.

입력

첫 번째 줄에 테스트 케이스의 개수 TT가 주어진다.

두 번째 줄부터 TT개의 줄에 걸쳐 각 테스트 케이스마다 한 줄에 정수 xx가 주어진다.

출력

각 테스트 케이스마다 아래와 같이 두 줄로 구성된 답안을 출력한다.

첫 번째 줄에 조건을 만족하는 배열의 원소 개수 nn을 출력한다.

두 번째 줄에 해당 배열의 원소 k_1,⋯ ,k_nk\_1,\cdots,k\_n을 공백으로 구분하여 출력한다. 조건을 만족하는 배열이 여러 개라면, 그중 아무거나 출력해도 된다. 조건을 만족하는 배열이 반드시 존재하는 입력만 주어진다.

제한

  • 1≤T≤1001 \le T \le 100
  • 0≤x≤1090 \le x \le 10^9

힌트

⊕\oplus는 Bitwise XOR을 나타내는 기호이다.

1<k_i1 \lt k\_i인 이유는, 만약 1≤k_i1 \le k\_i로 조건을 설정할 경우 n=1,k_1=1n=1, k\_1=1이 항상 답이 되어 게임이 재미 없어지기 때문이다.

k_i<231k\_i \lt 2^{31}인 이유는, 이 조건이 없으면 채점기를 만들기 힘들기 때문이다.

예제1

  1. 예제 1

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