#include <bits/stdc++.h>
using namespace std;
long double typedef ld;
unsigned int typedef ui;
long long int typedef li;
pair<int, int> typedef pii;
pair<li, li> typedef pli;
vector<vector<int>> typedef graph;
unsigned long long int typedef ull;
const ld PI = 3.14159265359;
const int mod = 1000000007;
const li inf = 1000000000000000001ll;
inline int power(li _a, int _n) {
  li _c = 1;
  while (_n > 0) {
    if (_n % 2) _c = _c * _a % mod;
    _a = _a * _a % mod;
    _n /= 2;
  }
  return _c;
}
inline int geom(li _a, int _n) {
  if (_a == 1) return _n + 1;
  return ((li)power(_a, _n + 1) - 1) * power((_a - 1), mod - 2) % mod;
}
pli _r;
li bigmod(li _a, li _b, li _m) {
  if (_a == 0) return 0;
  if (_a % 2 == 1) return (_b + 2 * bigmod(_a / 2, _b, _m)) % _m;
  return 2 * bigmod(_a / 2, _b, _m) % _m;
}
void euklid(li _a, li _b) {
  if (_b == 1) {
    _r = make_pair(1, -_a + 1);
    return;
  }
  euklid(_b, _a % _b);
  _r = make_pair(_r.second, _r.first - _r.second * (_a / _b));
}
li kinez(li _x, li _a, li _y, li _b) {
  if (_x == _y) return _x;
  if (_a > _b) {
    swap(_a, _b);
    swap(_x, _y);
  }
  euklid(_b, _a);
  (_r.first *= (_x - _y)) %= (_a * _b);
  return (bigmod(_b, _r.first, _a * _b) + _y) % (_a * _b);
}
inline li sum(int _n) { return ((li)_n * (_n + 1)) / 2; }
inline li kv(int _n) { return ((li)_n * (_n + 1) * (2 * _n + 1)) / 6; }
char s[1000007];
int p[1000007];
void gen_p(int n) {
  int poz = 0;
  for (int(i) = (1); (i) < (n); (i)++) {
    while (s[i] != s[poz]) {
      if (poz == 0) goto lolo;
      poz = p[poz];
    }
    poz++;
  lolo:
    p[i + 1] = poz;
  }
}
int main() {
  int n, k;
  scanf("%d%d", &n, &k);
  scanf("%s", &s[0]);
  gen_p(n);
  for (int(i) = (1); (i) <= n; (i)++) {
    int duz = i - p[i];
    int ost = i % duz;
    int broj = i / duz;
    putchar(
        ((ost == 0 && broj / k >= broj % k) || (ost > 0 && broj / k > broj % k))
            ? '1'
            : '0');
  }
}
