OI XXX - wir

// https://szkopul.edu.pl/problemset/problem/c9kbLOJVLHiQDcmiNo8Pa4w6/site/?key=statement

#include <bits/stdc++.h>

// #define GARY_DBG
#define GARY_LIB

#define int int64_t

constexpr int sizik = 1000 * 1001;

#define ar std::array

const int MAXN = 703;

struct Matrix {
    int r, c;
    std::bitset<MAXN> mat[MAXN];

    Matrix(int _r, int _c) : r(_r), c(_c) {
        for (int i = 0; i < r; i++)
            mat[i].reset();
    }

    static Matrix identity(int n) {
        Matrix res(n, n);
        for (int i = 0; i < n; i++)
            res.mat[i][i] = 1;
        return res;
    }

    bool get(int i, int j) const { return mat[i][j]; }

    void set(int i, int j, int val) { mat[i][j] = (val % 2); }

    Matrix operator*(const Matrix& other) const {
        Matrix res(r, other.c);
        for (int i = 0; i < r; i++) {
            for (int k = 0; k < c; k++) {
                if (mat[i][k]) {
                    res.mat[i] ^= other.mat[k];
                }
            }
        }
        return res;
    }

    Matrix pow(long long p) const {
        Matrix res = identity(r);
        Matrix a = *this;
        while (p > 0) {
            if (p & 1) res = res * a;
            a = a * a;
            p >>= 1;
        }
        return res;
    }
};

typedef std::vector<std::vector<int>> _kra;

void solve() {
    int n, d;
    std::cin >> n >> d;

    std::string s;
    std::cin >> s;

    Matrix M(n, n);
    for (int i = 0; i < n - 1; i++) {
        M.mat[i][i + 1] = 1;
    }
    M.mat[n - 1][0] = 1;
    M.mat[n - 1][1] = 1;

    M = M.pow(d);

    Matrix M2(n, 1);
    for (int i = 0; i < n; i++) {
        M2.mat[i][0] = (s[i] - '0');
    }

    Matrix C = M * M2;

    for (int i = 0; i < n; i++) {
        std::cout << C.mat[i][0];
    }
    std::cout << '\n';
}

int32_t main() {
#ifndef GARY_DBG
    std::ios_base::sync_with_stdio(0);
    std::cin.tie(0);
    std::cout.tie(0);
#endif

    int t = 1;
    // std::cin >> t;

    for (; t > 0; t--) {
        solve();
    }

    return 0;
}