#include <bits/stdc++.h>
using namespace std;
int n, t, cover[310], a[310];
int aa[310];
int cnt;
void init() { scanf("%d%d", &n, &t); }
int query(int l, int r) {
  printf("? %d %d\n", l, r);
  fflush(stdout);
  int x;
  scanf("%d", &x);
  return x;
}
int main() {
  init();
  int q = 1, h = n;
  while (q <= h) {
    if (q == h) {
      int ss = 0;
      for (int i = 1; i <= n; i++)
        if (i != q) ss += a[i] ^ cover[i];
      if (ss == t)
        a[q] = cover[q];
      else
        a[q] = cover[q] ^ 1;
      break;
    } else {
      while (true) {
        int nt = query(q, h - 1);
        if ((h - 1) % 2 == (nt - t + 10000) % 2) {
          int ss = 0;
          for (int i = h + 1; i <= n; i++) ss += a[i] ^ cover[i];
          if (h - (t - ss) < nt - ss)
            a[h] = 1 ^ cover[h];
          else
            a[h] = cover[h];
          for (int i = 1; i <= h - 1; i++) cover[i] ^= 1;
          t = nt;
          break;
        } else {
          for (int i = q; i <= n; i++) cover[i] ^= 1;
          t = nt;
        }
      }
      while (true) {
        int nt = query(q + 1, h);
        if ((n - q) % 2 == (nt - t + 10000) % 2) {
          int ss = 0;
          for (int i = 1; i < q; i++) ss += a[i] ^ cover[i];
          if (h - (t - ss) < nt - ss)
            a[q] = 1 ^ cover[q];
          else
            a[q] = cover[q];
          for (int i = q + 1; i <= n; i++) cover[i] ^= 1;
          t = nt;
          break;
        } else {
          for (int i = 1; i <= h; i++) cover[i] ^= 1;
          t = nt;
        }
      }
      q++;
      h--;
    }
  }
  printf("! ");
  for (int i = 1; i <= n; i++) {
    printf("%d", a[i]);
  }
  printf("\n");
  fflush(stdout);
}
