#include <bits/stdc++.h>
using namespace std;
int gi() {
  int a;
  scanf("%d", &a);
  return a;
}
long long gli() {
  long long a;
  scanf("%I64d", &a);
  return a;
}
int n, t;
pair<int, int> q[10000];
int qn = 0;
int s[300];
char fin[304];
int rv(int &a) {
  a = 1 - a;
  return a;
}
int ask(int l, int r) {
  printf("? %d %d\n", l + 1, r);
  fflush(stdout);
  int ot = t;
  t = gi();
  int res = 0;
  if (t % 2 == ot % 2) {
    if (r % 2) res = 1;
  } else {
    if (r % 2 == 0) res = 1;
  }
  q[qn].first = (res ? l : 0);
  q[qn].second = (res ? n : r);
  qn++;
  return res;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  n = gi();
  t = gi();
  int f = 0;
  if (n == 1) {
    s[0] = t;
  } else if (n % 2) {
    while (1) {
      int ot = t;
      if (ask(1, n)) {
        s[0] = (n - 1 - ot == t ? 0 : 1);
        break;
      }
    }
    f = 1;
  }
  for (int i = f; i < n; i++)
    while (1) {
      int ot = t;
      if (ask(i - f, i + 1) == 0) {
        int n1 = 0;
        for (int j = 0; j < i; j++) n1 += rv(s[j]);
        s[i] = (t - n1 == ot - (i + 1 - n1) ? 0 : 1);
        break;
      }
      if (f) rv(s[i - 1]);
    }
  for (int i = 0; i < qn; i++)
    for (int j = q[i].first; j < q[i].second; j++) rv(s[j]);
  for (int i = 0; i < n; i++) fin[i] = '0' + s[i];
  fin[n] = 0;
  printf("! %s\n", fin);
  return 0;
}
