#include <iostream>
#include <vector>
#include <unordered_map>

using namespace std;

int main () {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);

    int n, k;
    cin >> n >> k;
    unordered_map<char, int> counter;

    vector<char> niska(n);
    vector<int> duzina_min(n);
    duzina_min[0] = 1;

    for (int i = 0; i < n; i++) {
        cin >> niska[i];
    }

    if (n <= 5 and k == 2) {
        // za prvi slucaj (18 poena).
        if (n == 2) {
            duzina_min[1] = 2;
        }
        else if (n == 3) {
            if (niska[0] == niska[1]) {
                duzina_min[1] = 1;
                duzina_min[2] = 2;
            }
            else {
                duzina_min[1] = 2;
                duzina_min[2] = 2;
            }
        }
        else if (n == 4) {
            if(niska[0] == niska[1]) {
                duzina_min[1] = 1;
                if (niska[2] == niska[1]) {
                    duzina_min[2] = 1;
                    duzina_min[3] = 2;
                }
                else {
                    duzina_min[2] = 2;
                    duzina_min[3] = 2;
                }
            }
            else {
                duzina_min[1] = 2;
                if (niska[2] == niska[3]) {
                    duzina_min[2] = 2;
                    duzina_min[3] = 2;
                }
                else {
                    duzina_min[2] = 2;
                    duzina_min[3] = 3;
                }
            }
        }
        else {
            if (niska[0] == niska[1]) {
                duzina_min[1] = 1;
                if (niska[2] == niska[0]) {
                    duzina_min[2] = 1;
                    if (niska[3] == niska[0]) {
                        duzina_min[3] = 1;
                        duzina_min[4] = 2;
                    }
                    else {
                        duzina_min[3] = 2;
                        duzina_min[4] = 2;
                    }
                }

                else {
                    duzina_min[2] = 2;
                    duzina_min[3] = 2;
                    if (niska[3] == niska[4]) {
                        duzina_min[4] = 2;
                    }
                    else {
                        duzina_min[4] = 3;
                    }
                }
            }

            else {
                duzina_min[1] = 2;
                duzina_min[2] = 2;
                if (niska[2] == niska[0]) {
                    if (niska[3] == niska[0]) {
                        duzina_min[3] = 2;
                        if (niska[4] == niska[0]) {
                            duzina_min[4] = 2;
                        }
                        else {
                            duzina_min[4] = 3;
                        }
                    }
                    else {
                        duzina_min[3] = 3;
                        duzina_min[4] = 3;
                    }
                }
                else {
                    if (niska[3] == niska[0]) {
                        duzina_min[3] = 3;
                        duzina_min[4] = 3;
                    }
                    else {
                        duzina_min[3] = 2;
                        if (niska[4] == niska[0]) {
                            duzina_min[4] = 3;
                        }
                        else {
                            duzina_min[4] = 2;
                        }
                    }
                }
            }
        }
    }




    else {
        // za leksikografski poredjenu nisku (10 poena).
        int iskorisceno = 0;
        for (int i = 0; i < n; i++) {
            if (counter[niska[i]] == 0) {
                iskorisceno++;
            }
            if (iskorisceno < k) {
                duzina_min[i] = 1;
            }
            else {
                duzina_min[i] = 2;
            }
            counter[niska[i]]++;
        }
    }


    // stampanje minimalnih duzina.
    for (int i = 0; i < n; i++) {
        cout << duzina_min[i] << " ";
    }
    cout << endl;
    return 0;
}