description: Alice and Borys are playing tennis.
  
  A tennis match consists of games. In each game, one of the players is serving and the other one is receiving.
  
  Players serve in turns: after a game where Alice is serving follows a game where Borys is serving, and vice versa.
  
  Each game ends with a victory of one of the players. If a game is won by the serving player, it's said that this player holds serve. If a game is won by the receiving player, it's said that this player breaks serve.
  
  It is known that Alice won a games and Borys won b games during the match. It is unknown who served first and who won which games.
  
  Find all values of k such that exactly k breaks could happen during the match between Alice and Borys in total.
  
  Input
  
  Each test contains multiple test cases. The first line contains the number of test cases t (1 ≤ t ≤ 10^3). Description of the test cases follows.
  
  Each of the next t lines describes one test case and contains two integers a and b (0 ≤ a, b ≤ 10^5; a + b > 0) — the number of games won by Alice and Borys, respectively.
  
  It is guaranteed that the sum of a + b over all test cases does not exceed 2 ⋅ 10^5.
  
  Output
  
  For each test case print two lines.
  
  In the first line, print a single integer m (1 ≤ m ≤ a + b + 1) — the number of values of k such that exactly k breaks could happen during the match.
  
  In the second line, print m distinct integers k_1, k_2, …, k_m (0 ≤ k_1 < k_2 < … < k_m ≤ a + b) — the sought values of k in increasing order.
  
  Example
  
  Input
  
  
  3
  2 1
  1 1
  0 5
  
  
  Output
  
  
  4
  0 1 2 3
  2
  0 2
  2
  2 3
  
  Note
  
  In the first test case, any number of breaks between 0 and 3 could happen during the match: 
  
    * Alice holds serve, Borys holds serve, Alice holds serve: 0 breaks; 
    * Borys holds serve, Alice holds serve, Alice breaks serve: 1 break; 
    * Borys breaks serve, Alice breaks serve, Alice holds serve: 2 breaks; 
    * Alice breaks serve, Borys breaks serve, Alice breaks serve: 3 breaks. 
  
  
  
  In the second test case, the players could either both hold serves (0 breaks) or both break serves (2 breaks).
  
  In the third test case, either 2 or 3 breaks could happen: 
  
    * Borys holds serve, Borys breaks serve, Borys holds serve, Borys breaks serve, Borys holds serve: 2 breaks; 
    * Borys breaks serve, Borys holds serve, Borys breaks serve, Borys holds serve, Borys breaks serve: 3 breaks. 
solution: import java.io.*;
  import java.util.*;
  public class vk implements Runnable 
  {
  	private boolean console=false;
  
  	public void solve() 
  	{
  		int i; int a=in.ni(),b=in.ni();
  		int tm=a+b; int less=tm/2; int mo=(tm+1)/2;
  		int min=less-Math.min(a, b);
  		int max=tm-min;
  		if((a+b)%2==0)
  		{
  			int c=0;
  			for(i=min;i<=max;i+=2)
  			{
  				c++;
  				//if(i%2==0) c++;
  			}
  			out.println(c);
  			for(i=min;i<=max;i+=2)
  			{
  				out.print(i+" ");
  				//if(i%2==0) 
  			}
  		}
  		else
  		{
  			out.println(max-min+1);
  			for(i=min;i<=max;i++)
  			{
  				out.print(i+" ");
  			}
  		}
  		out.println();
  		
  	}
  		
  	@Override
  	public void run() {
  		try {  init();  } 
  		catch (FileNotFoundException e) {  e.printStackTrace();   }
  
  		int t = in.ni();
  
  		for(int i=1;i<=t;i++)
  		{
  			solve(); out.flush();
  		}
  	}
  	private FastInput in;    private PrintWriter out;
  	public static void main(String[] args) throws Exception {	 new vk().run();	 }
  
  	private void init() throws FileNotFoundException {
  		InputStream inputStream = System.in; 	 OutputStream outputStream = System.out;
  		try {  if (!console && System.getProperty("user.name").equals("sachan")) {
  			outputStream = new FileOutputStream("/home/sachan/Desktop/output.txt");
  			inputStream = new FileInputStream("/home/sachan/Desktop/input.txt");   	}
  		}	catch (Exception ignored) {	}
  		out = new PrintWriter(outputStream); 	 in = new FastInput(inputStream);
  	}
  	static class FastInput { InputStream obj;
  	public FastInput(InputStream obj) {	this.obj = obj;	}
  	byte inbuffer[] = new byte[1024];  int lenbuffer = 0, ptrbuffer = 0;
  	int readByte() { if (lenbuffer == -1) throw new InputMismatchException();
  	if (ptrbuffer >= lenbuffer) { ptrbuffer = 0;
  	try { lenbuffer = obj.read(inbuffer);  }
  	catch (IOException e) { throw new InputMismatchException(); } }    
  	if (lenbuffer <= 0) return -1;return inbuffer[ptrbuffer++]; }
  
  	String ns() { int b = skip();StringBuilder sb = new StringBuilder();
  	while (!(isSpaceChar(b)))	  { sb.appendCodePoint(b);b = readByte(); }return sb.toString();}
  
  	int ni() { int num = 0, b;boolean minus = false;
  	while ((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-')) ;
  	if (b == '-') { minus = true;b = readByte(); }
  	while (true) { if (b >= '0' && b <= '9') { num = num * 10 + (b - '0'); } else {
  		return minus ? -num : num; }b = readByte(); }}
  
  	long nl() { long num = 0;int b;boolean minus = false;
  	while ((b = readByte()) != -1 && !((b >= '0' && b <= '9') || b == '-')) ;
  	if (b == '-') { minus = true;b = readByte(); }
  	while (true) { if (b >= '0' && b <= '9') { num = num * 10L + (b - '0'); } else {
  		return minus ? -num : num; }b = readByte(); } }
  
  	boolean isSpaceChar(int c) { return (!(c >= 33 && c <= 126)); }
  	int skip() { int b;while ((b = readByte()) != -1 && isSpaceChar(b)) ;return b; }
  	float nf() {return Float.parseFloat(ns());}
  	double nd() {return Double.parseDouble(ns());}
  	char nc() {return (char) skip();}
  	}
  }