import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintStream; import java.io.PrintWriter; import java.util.Arrays; import java.util.List; import java.util.NoSuchElementException; import java.util.PrimitiveIterator.OfLong; import java.util.PrimitiveIterator; public class Main { static MyPrintWriter pw = MyPrintWriter.getInstance(); static FastScanner sc = FastScanner.getInstance(); public static void main(String[] args) throws IOException { Thread.setDefaultUncaughtExceptionHandler((t, e) -> System.exit(1)); new Main().run(); pw.flush(); } void run() { int T = sc.nextInt(); for (int TEST = 0; TEST < T; TEST++) { long A = sc.nextLong(); long B = sc.nextLong(); var ans = new LongArrayList(); while ((A + Long.lowestOneBit(A)) <= B) { ans.add(Long.lowestOneBit(A)); A += Long.lowestOneBit(A); } if (A != B) { long v = Long.lowestOneBit(A); while (v != 0) { if ((A + v) <= B) { A += v; ans.add(v); } v /= 2; } } pw.println(ans.size()); pw.println(ans.toArray()); } } } class FastScanner { private static FastScanner instance = null; private final InputStream in = System.in; private final byte[] buffer = new byte[1 << 16]; private int ptr = 0; private int buflen = 0; private FastScanner() { } public static FastScanner getInstance() { if (instance == null) { instance = new FastScanner(); } return instance; } private boolean hasNextByte() { if (ptr < buflen) { return true; } ptr = 0; try { buflen = in.read(buffer); } catch (IOException e) { e.printStackTrace(); } return buflen > 0; } private int readByte() { if (hasNextByte()) { return buffer[ptr++]; } else { return -1; } } private boolean isPrintableChar(int c) { return (33 <= c) && (c <= 126); } public boolean hasNext() { while (hasNextByte() && (!isPrintableChar(buffer[ptr]))) { ptr++; } return hasNextByte(); } public long nextLong() { if (!hasNext()) { throw new NoSuchElementException(); } long n = 0; boolean minus = false; int b = readByte(); if (b == '-') { minus = true; b = readByte(); } while ((b >= '0') && (b <= '9')) { // n = n * 10 + (b - '0'); n = ((n << 1) + (n << 3)) + (b - '0'); b = readByte(); } return minus ? -n : n; } public int nextInt() { return ((int) (nextLong())); } } /** * * * lenがa.lengthに比べて小さくなっても配列を取り直さない。 */ class LongArrayList implements Iterable { @SuppressWarnings("unchecked") long[] a; int tail = 0; int len = 0; int capacity = 16; public LongArrayList() { a = new long[capacity]; } public void add(long v) { if (len == a.length) { resize(2 * len); } a[tail] = v; tail++; ++len; } public long get(int id) { if ((id < 0) || (id >= len)) { throw new IndexOutOfBoundsException(((((("get(" + id) + ")は添え字") + 0) + "以上") + (len - 1)) + "以下に違反"); } return a[id]; } void resize(int size) { a = Arrays.copyOf(a, size); tail = len; } public int size() { return len; } public long[] toArray() { return Arrays.copyOf(a, len); } @Override public PrimitiveIterator.OfLong iterator() { return new PrimitiveIterator.OfLong() { int idx = 0; @Override public boolean hasNext() { return idx < len; } @Override public long nextLong() { if (!hasNext()) { throw new NoSuchElementException(); } return get(idx++); } }; } /** * 内部状態を文字列として表す。 * * * @return 内部状態の文字列表現 */ // 未テスト @Override public String toString() { return ("LongArrayList { elements: " + Arrays.toString(toArray())) + " }"; } } class MyPrintWriter extends PrintWriter { private static MyPrintWriter instance = null; private MyPrintWriter() { super(System.out); } public static MyPrintWriter getInstance() { if (instance == null) { instance = new MyPrintWriter(); } return instance; } public void println(long[] a) { println(a, " "); } public void println(long[] a, String separator) { for (int i = 0; i < a.length; ++i) { super.print(a[i] + (i == (a.length - 1) ? "" : separator)); } super.println();// a.length=0でも改行させたいのでループの外に。 } } // --- Original Code --- // // // import java.io.IOException; // import java.util.ArrayList; // import java.util.Arrays; // // import library.tools.FastScanner; // import library.tools.MergeFiles; // import library.tools.MyPrintWriter; // import library.util.ArrayUtils; // import library.util.Fp; // import library.util.collections.LongArrayList; // import library.util.graph.ImplicitDigraph; // // public class Main { // static MyPrintWriter pw = MyPrintWriter.getInstance(); // static FastScanner sc = FastScanner.getInstance(); // // public static void main(String[] args) throws IOException { // new Main().run(); // pw.flush(); // MergeFiles.export(); // } // // // void run() { // int T=sc.nextInt(); // for (int TEST = 0; TEST < T; TEST++) { // long A=sc.nextLong(); // long B=sc.nextLong(); // var ans=new LongArrayList(); // while(A+Long.lowestOneBit(A) <= B) { // ans.add(Long.lowestOneBit(A)); // A+=Long.lowestOneBit(A); // } // if (A != B) { // long v=Long.lowestOneBit(A); // while (v != 0) { // if (A + v <= B) { // A += v; // ans.add(v); // } // v /= 2; // } // } // pw.println(ans.size()); // pw.println(ans.toArray()); // } // } // // void tr(Object... objects) { // System.out.println(Arrays.deepToString(objects)); // } // } //