#include <bits/stdc++.h>
using namespace std;
int flip[305];
int ans[305];
int query(int l, int r) {
  cout << "? " << l << " " << r << '\n';
  cout.flush();
  int a;
  cin >> a;
  return a;
}
void f(int l, int r) {
  for (int i = l; i <= r; i++) {
    flip[i] ^= 1;
  }
}
int main() {
  int S1 = 0, S2 = 0, C1 = 0, C2 = 0;
  cin >> S1 >> C1;
  memset(flip, sizeof(flip), 0);
  memset(ans, sizeof(ans), 0);
  while (S1 > 1) {
    if ((S1 % 2) == 0) {
      int q = query(S1, S1 + S2);
      if (q == S1 - C1 + S2 - C2) {
        f(1, S1 + S2);
        C1 = S1 - C1;
        C2 = S2 - C2;
      } else {
        q -= C1 + (S2 - C2);
        if (q == 1) {
          ans[S1] = flip[S1];
        } else if (q == -1) {
          ans[S1] = flip[S1] ^ 1;
          C1--;
          C2++;
        }
        S1--;
        S2++;
        C2 = S2 - C2;
      }
    } else if ((S2 % 2) == 0) {
      int q = query(1, S1 - 1);
      if (q == S1 - C1 + S2 - C2) {
        f(1, S1 + S2);
        C1 = S1 - C1;
        C2 = S2 - C2;
      } else {
        q -= C2 + (S1 - C1);
        if (q == 1) {
          ans[S1] = flip[S1] ^ 1;
          C1--;
          C2++;
        } else if (q == -1) {
          ans[S1] = flip[S1];
        }
        f(1, S1 - 1);
        S1--;
        S2++;
        C1 = S1 - C1;
      }
    } else {
      int q = query(S1, S1);
      if (q == S1 - C1 + C2) {
        f(1, S1);
        C1 = S1 - C1;
      } else {
        q -= (S2 - C2) + C1;
        if (q == -1) {
          ans[S1] = flip[S1] ^ 1;
          C2++;
          C1--;
        } else if (q == 1) {
          ans[S1] = flip[S1];
        }
        S1--;
        S2++;
        C2 = S2 - C2;
      }
    }
  }
  ans[1] = C1 ^ flip[1];
  cout << "! ";
  for (int i = 1; i <= S1 + S2; i++) {
    cout << ans[i];
  }
}
