#include <bits/stdc++.h>   using namespace std;   struct fastIO {     inline fastIO operator>>(int& num) {       num = 0;       char c = getchar();       while (c !=  -  && (c <  0  || c >  9 )) c = getchar();       bool foo = 0;       if (c ==  - ) {         foo = 1;         c = getchar();       }       while (c >=  0  && c <=  9 ) {         num = (num << 3) + (num << 1) + c -  0 ;         c = getchar();       }       if (foo) num = -num;       return *this;     }     inline fastIO operator>>(long long& num) {       num = 0;       char c = getchar();       while (c !=  -  && (c <  0  || c >  9 )) c = getchar();       bool foo = 0;       if (c ==  - ) {         foo = 1;         c = getchar();       }       while (c >=  0  && c <=  9 ) {         num = (num << 3) + (num << 1) + c -  0 ;         c = getchar();       }       if (foo) num = -num;       return *this;     }     inline fastIO operator>>(float& num) {       scanf( %f , &num);       return *this;     }     inline fastIO operator>>(double& num) {       scanf( %lf , &num);       return *this;     }     inline fastIO operator>>(long double& num) {       scanf( %Lf , &num);       return *this;     }     inline fastIO operator>>(char& num) {       num = getchar();       while (num ==     || num ==   n ) num = getchar();       return *this;     }     inline fastIO operator>>(char* num) {       int cnt = 0;       char c = getchar();       while (c ==     || c ==   n ) c = getchar();       while (c !=     && c !=   n ) {         num[cnt++] = c;         c = getchar();       }       num[cnt] = 0;       return *this;     }     inline fastIO operator>>(string& num) {       cin >> num;       return *this;     }     inline void printInt(const int& num) {       if (num < 10) {         putchar(num +  0 );         return;       }       printInt(num / 10);       putchar((num % 10) +  0 );     }     inline void printINT(const long long& num) {       if (num < 10) {         putchar(num +  0 );         return;       }       printINT(num / 10);       putchar((num % 10) +  0 );     }     inline fastIO operator<<(const int& num) {       if (num < 0)         putchar( - ), printInt(-num);       else         printInt(num);       return *this;     }     inline fastIO operator<<(const long long& num) {       if (num < 0)         putchar( - ), printINT(-num);       else         printINT(num);       return *this;     }     inline fastIO operator<<(const float& num) {       printf( %.10f , num);       return *this;     }     inline fastIO operator<<(const double& num) {       printf( %.16lf , num);       return *this;     }     inline fastIO operator<<(const long double& num) {       printf( %.20Lf , num);       return *this;     }     inline fastIO operator<<(const char& num) {       putchar(num);       return *this;     }     inline fastIO operator<<(const char* num) {       for (int i = 0; num[i]; i++) putchar(num[i]);       return *this;     }     inline fastIO operator<<(const string& num) {       cout << num;       return *this;     }   } fio;   char s[1000005];   int fail[1000005];   int bz[1000005][25];   int n, k;   int main() {     fio >> n >> k;     fio >> (s + 1);     int fu = 0;     fail[1] = 0;     for (int i = 2; i <= n; i++) {       while (fu && s[i] != s[fu + 1]) {         fu = fail[fu];       }       if (s[i] == s[fu + 1]) {         fu++;       }       fail[i] = fu;     }     fail[0] = 0;     for (int i = 0; i <= n; i++) {       bz[i][0] = fail[i];     }     for (int i = 1; i <= 20; i++) {       for (int j = 0; j <= n; j++) {         bz[j][i] = bz[bz[j][i - 1]][i - 1];       }     }     for (int i = 1; i <= n; i++) {       int frm = (1LL * (k - 1) * i + k - 1) / k;       int to = 1LL * k * i / (k + 1);       int xx = i;       for (int j = 20; j >= 0; j--) {         if (bz[xx][j] > to) {           xx = bz[xx][j];         }       }       xx = bz[xx][0];       if (frm <= xx && to >= xx) {         fio << 1;       } else {         fio << 0;       }     }     fio <<   n ;     return 0;   }