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.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
import java.util.StringTokenizer;

public class Main {
    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());
        }
    }
    static FastReader s = new FastReader();
    public static void main(String[] args) {
        int n = s.nextInt();
        int k = s.nextInt();
        ArrayList<Integer> [] c = new ArrayList[5001];
        int [] a = new int [n];
        for (int i = 0; i < 5001; i++) {
            c[i] = new ArrayList<>();
        }
        for (int i = 0; i < n; i++) {
            a[i] = s.nextInt();
            c[a[i]].add(i);
        }
        int max = 0;
        for (int i = 0; i < 5001; i++) {
            max = Math.max(c[i].size(), max);
        }
        if (max > k){
            System.out.println("NO");
            return;
        }
        int [] cls = new int [n];
        int cnt = 1;
        for (int i = 0; i < 5001; i++) {
            for (int j = 0; j < c[i].size(); j++) {
                cls[c[i].get(j)] = cnt;
                cnt = cnt % k + 1;
            }
        }
        System.out.println("YES");
        for (int cl : cls) {
            System.out.print(cl + " ");
        }
    }
    public static long hashCode(char[] value) {
        long h = 0;
        char [] var2 = value;
        int var3 = value.length;

        for(int var4 = 0; var4 < var3; ++var4) {
            char v = var2[var4];
            h = 31 * h + (v & 255);
            h %= 1000000007;
        }

        return h;
    }
    static boolean a (int n){
        int [] col = new int [10];
        while (n != 0){
            col[n % 10] ++;
            n /= 10;
        }
        for (int i = 0; i < 10; i++) {
            if (col[i] > 1) return false;
        }
        return true;
    }
    static class Pair implements Comparable<Pair> {
        int first;
        int second;

        Pair(int x, int y) {
            this.first = x;
            this.second = y;
        }

        @Override
        public int compareTo(Pair pair) {
            if (first != pair.first) return first - pair.first;
            else return second - pair.second;
        }
    }
}
class Deque {
    int [] a = new int [10000000];
    int head = 0;
    int tail = 0;
    public void add(int o) {
        a[tail++] = o;
    }
    int pop_last(){
        return a[--tail];
    }
    int pop_first(){
        return a[head++];
    }
}