You are given an array a consisting of n integer numbers.

You have to color this array in k colors in such a way that: 

  * Each element of the array should be colored in some color; 
  * For each i from 1 to k there should be at least one element colored in the i-th color in the array; 
  * For each i from 1 to k all elements colored in the i-th color should be distinct. 



Obviously, such coloring might be impossible. In this case, print "NO". Otherwise print "YES" and any coloring (i.e. numbers c_1, c_2, ... c_n, where 1 ≤ c_i ≤ k and c_i is the color of the i-th element of the given array) satisfying the conditions above. If there are multiple answers, you can print any.

Input

The first line of the input contains two integers n and k (1 ≤ k ≤ n ≤ 5000) — the length of the array a and the number of colors, respectively.

The second line of the input contains n integers a_1, a_2, ..., a_n (1 ≤ a_i ≤ 5000) — elements of the array a.

Output

If there is no answer, print "NO". Otherwise print "YES" and any coloring (i.e. numbers c_1, c_2, ... c_n, where 1 ≤ c_i ≤ k and c_i is the color of the i-th element of the given array) satisfying the conditions described in the problem statement. If there are multiple answers, you can print any.

Examples

Input


4 2
1 2 2 3


Output


YES
1 1 2 2


Input


5 2
3 2 1 2 3


Output


YES
2 1 1 2 1


Input


5 2
2 1 1 2 1


Output


NO

Note

In the first example the answer 2~ 1~ 2~ 1 is also acceptable.

In the second example the answer 1~ 1~ 1~ 2~ 2 is also acceptable.

There exist other acceptable answers for both examples.
import java.util.*;

public class FiveJetSoldier {
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        int countN=in.nextInt();
        int countK=in.nextInt();
        in.nextLine();
        String s = in.nextLine();
        int[] arrQ=new int[countN];
        String[] split = s.split(" ");
        for (int i = 0; i < countN; i++) {
            arrQ[i]= Integer.parseInt(split[i]);
        }
        Map<Integer,Integer> map=new HashMap<>();
        for (int i = 0; i < countN; i++) {
            if(map.containsKey(arrQ[i])){
                map.put(arrQ[i],map.get(arrQ[i])+1);
            }else {
                map.put(arrQ[i],1);
            }
        }
        int[] output=new int[countN];
       int max= Collections.max(map.values());
        int count=1;
       if(max>countK){
           System.out.println("NO");
       }else {
           System.out.println("YES");
           Set<Integer> set = map.keySet();
            ArrayList<Integer> arrayList=new ArrayList(set);
           for (int i = 0; i < arrayList.size(); i++) {
               for (int j = 0; j < countN; j++) {
                   if(arrayList.get(i)==arrQ[j]){
                       output[j]=count;
                       count++;
                       if(count>countK){
                           count=count-countK;
                       }
                   }
               }
           }
           StringBuilder sb=new StringBuilder();
           for (int i = 0; i < output.length; i++) {
              sb.append(output[i]).append(" ");
           }
           System.out.println(sb);
       }
    }
}
		 	  		  	    	  			 		   				