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.io.*;
import java.util.*;
 
public class B 
{	
	public static void main(String[] args)throws IOException 
	{	
		FastReader f=new FastReader();
		StringBuffer sb = new StringBuffer();
		
		int n=f.nextInt();
		int k=f.nextInt();
		
		//if no of a distinct elements>k => -1
		int a[]=new int[n];
		int col[]=new int[n];
		Map<Integer,Integer> map=new HashMap<>();
		for(int i=0;i<n;i++)
		{
			a[i]=f.nextInt();
			
			if(!map.containsKey(a[i]))	map.put(a[i],1);
			else	map.put(a[i],map.get(a[i])+1);
		}
		for(int key : map.keySet())
		{
			if(map.get(key)>k)
			{
				System.out.println("NO");
				return;
			}
		}
		
		TreeSet<Integer> ts=new TreeSet<>();
		for(int i=1;i<=k;i++)
			ts.add(i);
		
		map.clear();
		for(int j=1;j<=k;j++)
		{	
			Set<Integer> set=new HashSet<>();
			int count=0;
			for(int i=0;i<n;i++)
			{	
				if(!set.contains(a[i]) && col[i]==0)
				{
					set.add(a[i]);
					col[i]=j;
					count++;
					if(ts.contains(j))
						ts.remove(j);
				}
			}
			if(count>0)
				map.put(j,count);
		}
		
		while(!ts.isEmpty())
		{
			int c=ts.pollFirst();
			for(int i=0;i<n;i++)
			{		
				if(!map.containsKey(col[i]))
					continue;
				int freq=map.get(col[i]);
				if(freq>1)
				{
					freq--;
					map.put(col[i], freq);
					col[i]=c;
					break;
				}
			}
		}
		
		System.out.println("YES");
		for(int x : col)
			System.out.print(x+" ");
	}
	
	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; 
	    } 
	} 
}