Increasing Sequence with Fixed OR

Problem Statement

You are given a positive integer nn𝑛. Find the longest sequence of positive integers a=[a1,a2,,ak]a=[a1,a2,…,ak]𝑎=[𝑎1,𝑎2,…,𝑎𝑘] that satisfies the following conditions, and print the sequence:

  • ainai≤n𝑎𝑖≤𝑛 for all 1ik1≤i≤k1≤𝑖≤𝑘.

  • aa𝑎 is strictly increasing. That is, ai>ai1ai>ai−1𝑎𝑖>𝑎𝑖−1 for all 2ik2≤i≤k2≤𝑖≤𝑘.

  • aiai1=nai|ai−1=n𝑎𝑖|𝑎𝑖−1=𝑛 for all 2ik2≤i≤k2≤𝑖≤𝑘, where || denotes the bitwise OR operation.

Input

Each test contains multiple test cases. The first line contains the number of test cases tt𝑡 (1t10001≤t≤10001≤𝑡≤1000). Description of the test cases follows.

The only line of each test case contains one integer nn𝑛 (1n10181≤n≤10181≤𝑛≤1018).

It's guaranteed that the sum of lengths of the longest valid sequences does not exceed 51055⋅1055⋅105.

Output

For each testcase, print two lines. In the first line, print the length of your constructed sequence, kk𝑘. In the second line, print kk𝑘 positive integers, denoting the sequence. If there are multiple longest sequences, you can print any of them.

ExampleinputCopy

4131423

outputCopy

1
1
3
1 2 3
4
4 10 12 14
5
7 18 21 22 23

Intuition

https://codeforces.com/contest/1988/problem/C

https://www.youtube.com/watch?v=sAUI0T6r9TA&t=1161s&ab_channel=CompetitiveProgrammingwithShayan

Approach 1:

Approach 2:

Approach 3:

Approach 4:

Similar Problems

Last updated