Problem: You are given two positive integers n (1 ≤ n ≤ 10^9) and k (1 ≤ k ≤ 100). Represent the number n as the sum of k positive integers of the same parity (have the same remainder when divided by 2).

In other words, find a_1, a_2, …, a_k such that all a_i>0, n = a_1 + a_2 + … + a_k and either all a_i are even or all a_i are odd at the same time.

If such a representation does not exist, then report it.

Input

The first line contains an integer t (1 ≤ t ≤ 1000) — the number of test cases in the input. Next, t test cases are given, one per line.

Each test case is two positive integers n (1 ≤ n ≤ 10^9) and k (1 ≤ k ≤ 100).

Output

For each test case print:

  * YES and the required values a_i, if the answer exists (if there are several answers, print any of them); 
  * NO if the answer does not exist. 



The letters in the words YES and NO can be printed in any case.

Example

Input


8
10 3
100 4
8 7
97 2
8 8
3 10
5 3
1000000000 9


Output


YES
4 2 4
YES
55 5 5 35
NO
NO
YES
1 1 1 1 1 1 1 1
NO
YES
3 1 1
YES
111111110 111111110 111111110 111111110 111111110 111111110 111111110 111111110 111111120

Solution (in JAVA):

Solution:
// package CodeForces;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.Scanner;
import java.util.Stack;
import java.util.StringTokenizer;

public class Solution {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		FastReader s = new FastReader();
		int t = s.nextInt();
		StringBuilder str = new StringBuilder();
		for(int Case = 0 ; Case < t ; Case++) {
			int n = s.nextInt();
			int k = s.nextInt();
			if(k > n) {
				str.append("NO"+"\n");
			}else if(n%2 != 0) {
				if(k%2  == 0)str.append("NO"+"\n");
				else {
					str.append("YES"+"\n");
					for(int i = 0 ; i < k-1 ; i++) {
							str.append(1+" ");
					}
					str.append((n-k+1)+"\n");
				}
			}else {
				if(k%2  == 0){
					str.append("YES"+"\n");
					for(int i = 0 ; i < k-1 ; i++) {
							str.append(1+" ");
					}
					str.append((n-k+1)+"\n");
				}else {
					if(n/2 < k ) str.append("NO"+"\n");
					else {
						str.append("YES"+"\n");
						for(int i = 0 ; i < k-1 ; i++) {
								str.append(2+" ");
						}
						str.append((n-2*(k-1))+"\n");
					}
				}
			}
		}
		System.out.println(str);
		
	}
	 static 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; 
	        } 
	    } 

}

//6
//1 1 1
//3 6 0
//0 0 0
//0 1 1
//10 1 10
//4 4 1