You are given two integers n and k. You are asked to choose maximum number of distinct integers from 1 to n so that there is no subset of chosen numbers with sum equal to k.

A subset of a set is a set that can be obtained from initial one by removing some (possibly all or none) elements of it.

Input

The first line contains the number of test cases T (1 ≤ T ≤ 100).

Each of the next T lines contains two integers n and k (1 ≤ k ≤ n ≤ 1000) — the description of test cases.

Output

For each test case output two lines. In the first line output a single integer m — the number of chosen integers.

In the second line output m distinct integers from 1 to n — the chosen numbers.

If there are multiple answers, print any. You can print the numbers in any order.

Example

Input


3
3 2
5 3
1 1


Output


2
3 1 
3
4 5 2 
0
import java.io.*;

import java.util.*;
 public class Solution {
	 public static void main(String[] args) throws Exception
    {
		 FastReader fr=new FastReader();
		 int t=fr.nextInt();
		 while(t-->0) {
			 int n=fr.nextInt();
			 int k=fr.nextInt();
			 Set<Integer> set=new HashSet<>();
			
			 int tots=n-k;
			 for(int i=k+1;i<=n;i++) {
				 int v=k-i;
				 if(!set.contains(v));
				 set.add(i);
			 }
			 for(int i=1;i<k;i++) {
				int v=k-i;
				if(!set.contains(v))
					set.add(i);
			 }
			 
			 
			 System.out.println(set.size());
			 for(int i:set)
				 System.out.print(i+" ");
			 System.out.println();
		 }
		 
		  
            
    }
	 public static int bsearch(long suf[],long val) {
		 int i=0;
		 int j=suf.length-1;
		 while(i<=j) {
			 int mid=(i+j)/2;
			 if(suf[mid]==val)
				 return mid;
			 else if(suf[mid]<val)
				 j=mid-1;
			 else
				 i=mid+1;
		 }
		 return -1;
	 }
	 
	 
	 
	public static boolean check(String s) {//balanced para
		Stack<Character> st=new Stack<>();
		//System.out.println(s);
		for(char c:s.toCharArray()) {
			if(c=='(')
				st.push(c);
			else {
				if(st.isEmpty())
					return false;
				else if(st.peek()=='(')
					st.pop();
			}
		}
		if(!st.isEmpty())
			return false;
		else
			return true;
	}
	 
	 
	 public static void print(String str) {
		 System.out.println(str);
	 }
	public static int[] getFreq(String s) {
		int a[]=new int[26];
		for(int i=0;i<s.length();i++) {
			a[s.charAt(i)-'a']++;
		}
		return a;
		
	}
	 
	 public static boolean isPrime(int n) {
		 
		 for(int i=2;(i*i)<=n;i++) {
			 if(n%i==0)
				 return false;
		 }
		 return true;
	 }
            	  
             
             
    }
 class Pair{
	 int x;
	 int y;
	 long cost;
	 Pair(int x,int y,long cost){
		 this.x=x;
		 this.y=y;
		 this.cost=cost;
	 }
 }
	
	 
	
	

	 
 
  

class FastReader
{
    BufferedReader br;
    StringTokenizer st;
 
    public FastReader()
    {
        br = new BufferedReader(new
                InputStreamReader(System.in));
    }
 
    String next()
    {
        while (st == null || !st.hasMoreElements())
        {
            try
            {
                st = new StringTokenizer(br.readLine());
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
        }
        return st.nextToken();
    }
 
    int nextInt()
    {
        return Integer.parseInt(next());
    }
 
    long nextLong()
    {
        return Long.parseLong(next());
    }
 
    double nextDouble()
    {
        return Double.parseDouble(next());
    }
 
    String nextLine()
    {
        String str = "";
        try
        {
            str = br.readLine();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        return str;
    }
}

