#include <bits/stdc++.h>
using namespace std;
int n, k, a[303], flipped[303];
int query(int l, int r) {
  cout << "? " << l << " " << r << endl;
  cin >> l;
  fflush(stdin);
  return l;
}
void flip(int l, int r) {
  for (int i = l; i < r + 1; i++) {
    flipped[i] ^= 1;
  }
}
void sol(int l, int r, int segk, bool f) {
  if (l > r) return;
  int lc = 0, rc = 0;
  for (int i = 1; i < l; i++) lc += a[i] ^ flipped[i];
  for (int i = r + 1; i < n + 1; i++) rc += a[i] ^ flipped[i];
  if (l == r)
    a[l] = flipped[l] ^ segk;
  else if (f) {
    while (1) {
      int q = query(l, r - 1);
      if (lc + n - r - rc + r - l + 1 - segk == q) {
        segk = r - l + 1 - segk;
        rc = n - r - rc;
        flip(l, n);
      } else {
        int g = (q + 1 + lc + segk - r - rc) / 2;
        a[r] = flipped[r] ^ g;
        lc = l - 1 - lc;
        segk = r - l - segk + 2 * g;
        flip(1, r - 1);
        sol(l, r, segk, !f);
        return;
      }
    }
  } else {
    while (1) {
      int q = query(l + 1, r);
      if (l - 1 - lc + rc + r - l + 1 - segk == q) {
        segk = r - l + 1 - segk;
        lc = l - 1 - lc;
        flip(1, r);
      } else {
        int g = (q + rc + l + segk - n - lc) / 2;
        a[l] = flipped[l] ^ g;
        rc = n - r - rc;
        segk = r - l - segk + g;
        flip(l + 1, n);
        sol(l + 1, r - 1, segk - (a[r] ^ flipped[r]), !f);
        return;
      }
    }
  }
}
void disp() {
  cout << "! ";
  for (int i = 1; i < n + 1; i++) cout << a[i];
  cout << endl;
}
void solve() {
  cin >> n >> k;
  sol(1, n, k, 1);
  disp();
}
signed main() {
  int t = 1;
  while (t--) {
    solve();
  }
  return 0;
}
