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:
        import java.util.*;
import java.io.*;
public class codeforcesdiv4 {
	static int n,l,r,k;
	static Integer arr[];
	static Integer ml,mr,block;
	static Integer ans[];
	static ArrayList<pair> query;
	static StringBuilder answer;
	static HashMap<Integer,Integer> map=new HashMap<>();
	public static void main(String[] args) throws IOException{
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		Integer t=Integer.parseInt(br.readLine().trim());
		
		answer=new StringBuilder();
		while(t-->0) {
			
			StringTokenizer tok=new StringTokenizer(br.readLine()," ");
			n=Integer.parseInt(tok.nextToken());
			k=Integer.parseInt(tok.nextToken());
			
			if(k==1) {
				answer.append("YES\n");
				answer.append(n);
				
			}
			else if(k>n || n%2!=0 && k%2==0) {
				answer.append("NO");
			}
			else if(n==k) {
				answer.append("YES\n");
				for(int i=0;i<n;i++) {
					
					answer.append(1+" ");
				}
				
			}
			else if(n%2==0 && k*2<=n) {
				answer.append("YES\n");
				for(int i=1;i<=k;i++) {
					if(i==k) {
						answer.append(n);
					}
					else {
						answer.append(2+" ");
						n-=2;
					}
				}
			}
			
			else if((n-k)%2==0){
				
				answer.append("YES\n");
				for(int i=1;i<=k;i++) {
					if(i==k) {
						answer.append(n);
					}else {
						answer.append(1+" ");
						n--;
					}
					
				}
			
				
			}
			else {
				answer.append("NO");
			}
			answer.append("\n");
			
			
			
			
//			StringTokenizer tok=new StringTokenizer(br.readLine()," ");
//			arr=new Integer[n];
//			for(int i=0;i<n;i++) {
//				arr[i]=Integer.parseInt(tok.nextToken());
//				
//			}
			

//			addtoans(ans);
		}
		System.out.println(answer);
		
	}
	static void addtoans(int a){
		answer.append(a+"\n");
	}	
	static class pair {
		int l,r,i;
		pair(int l,int r,int i){
			this.l=l;
			this.r=r;
			this.i=i;
			
		}
	}
	static class ss implements Comparator<pair>{
		public int compare(pair a,pair b) {
			if(a.l/block!=b.l/block) {
				return a.l<b.l?-1:1;
			}
			return a.r<b.r?-1:1;
			
			
			
			
		}	
	}
}