Problem: 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

Solution (in CPP):

Solution:
#include<bits/stdc++.h>
using namespace std;
#define mod (int) 998244353
#define MOD (int) 1e9+7
#define X 1001100011100001111ll
#define all(a) a.begin(),a.end()
#define for0(i, n) for (int i = 0; i < n; i++)
#define for1(i, n) for (int i = 1; i <= n; i++)
#define loop(i,a,b) for (int i = a; i < b; i++)
#define bloop(i,a,b) for (int i = a ; i>=b;i--)
#define tc(t) int t; cin >> t; while (t--)
#define int long long
#define ll long long
#define pb emplace_back
#define fio ios_base::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL)
#define in(x) scanf("%d", &x)
#define rr return 0
#define prec(n) fixed<<setprecision(n)
#define maxpq priority_queue<int>
#define minpq priority_queue<int, vector<int>, greater<int> >
#define inf (int)(1e18)
#define ini(a, i) memset(a, i, sizeof(a))
#define vi vector<int>
#define fi first
#define se second
#define endl "\n"
#define ii pair<int, int>
#define vii vector<ii>
#define mx 10000

int tree[mx];

void build(int node,int tl,int tr,vector<ll>arr)
{
    if(tr==tl)
    {
        tree[node]=arr[tl];
        return;
    }
    int mid=(tr+tl)/2;

    build(2*node,tl,mid,arr);
    build(2*node+1,mid+1,tr,arr);

    ///tree[node]=tree[2*node]+tree[2*node+1];
}

int gcd(int a, int b)
{
    if (a == 0)
        return b;
    return gcd(b % a, a);
}

signed main()
{

    tc(t)
    {
        ll n,k;
        cin>>n>>k;
        vector<ll>v;
        if(k<n){
            for(int i=k+1;i<=n;i++)
                v.push_back(i);

         if(k%2){
                int l=k/2+1;
            for(int i=k-1;i>=l;i--)
            v.push_back(i);
         }
         else{
            int l=k/2;
            for(int i=k-1;i>=l;i--){
                v.push_back(i);
            }
         }
        }
        else{
             if(k%2){
                int l=k/2+1;
            for(int i=k-1;i>=l;i--)
            v.push_back(i);
         }
         else{
            int l=k/2;
            for(int i=k-1;i>=l;i--){
                v.push_back(i);
            }
        }
    }
    if(n==1 && k==1)
       cout<<0<<endl;
    else{
            cout<<v.size()<<endl;
    for0(i,v.size())
    cout<<v[i]<<" ";
    cout<<endl;
    }
}
}