#include <bits/stdc++.h>
using namespace std;
clock_t __stt;
inline void TStart() { __stt = clock(); }
inline void TReport() {
  printf("\nTaken Time : %.3lf sec\n",
         (double)(clock() - __stt) / CLOCKS_PER_SEC);
}
template <typename T>
T MIN(T a, T b) {
  return a < b ? a : b;
}
template <typename T>
T MAX(T a, T b) {
  return a > b ? a : b;
}
template <typename T>
T ABS(T a) {
  return a > 0 ? a : (-a);
}
template <typename T>
void UMIN(T &a, T b) {
  if (b < a) a = b;
}
template <typename T>
void UMAX(T &a, T b) {
  if (b > a) a = b;
}
int n, t, a[305], s[305];
int ask(int l, int r) {
  printf("? %d %d\n", l + 1, r + 1);
  fflush(stdout);
  int R;
  scanf("%d", &R);
  if (R == -1) exit(0);
  return R;
}
int askP(int d) {
  int ret = 0;
  while (1) {
    int p, q;
    p = ask(d, d);
    q = ask(d, d);
    if (q != t) {
      int c02 = (n - 1 - (q - t)) / 2;
      ret = t - c02;
      break;
    }
  }
  while (1) {
    ask(d, d);
    if (ask(d, d) == t) break;
  }
  return ret;
}
int askR(int s) {
  int ret = 0;
  while (1) {
    int p, q;
    p = ask(0, s - 1);
    q = ask(0, s - 1);
    if (q != t) {
      ret = (n - s - (q - t)) / 2;
      break;
    }
  }
  while (1) {
    ask(0, s - 1);
    if (ask(0, s - 1) == t) break;
  }
  return ret;
}
int askL(int s) {
  int ret = 0;
  while (1) {
    int p, q;
    p = ask(s + 1, n - 1);
    q = ask(s + 1, n - 1);
    if (q != t) {
      ret = (s + 1 - (q - t)) / 2;
      break;
    }
  }
  while (1) {
    ask(s + 1, n - 1);
    if (ask(s + 1, n - 1) == t) break;
  }
  return ret;
}
int main() {
  int i, j, k;
  scanf("%d%d", &n, &t);
  if (n == 1) {
    printf("! %d\n", t);
    fflush(stdout);
    return 0;
  }
  if (n == 2) {
    a[0] = askL(0);
    a[1] = t - a[0];
    printf("! %d%d\n", a[0], a[1]);
    fflush(stdout);
    return 0;
  }
  if (n & 1) {
    for (i = 0; i < n - 1; ++i) {
      if ((i + 1) & 1) {
        s[i] = askL(i);
      } else if ((n - i - 1) & 1) {
        s[i] = t - askR(i + 1);
      }
    }
    s[n - 1] = t;
    for (i = 0; i < n; ++i) {
      a[i] = s[i] - (i ? s[i - 1] : 0);
    }
  } else {
    for (i = 1; i < n - 1; ++i) {
      a[i] = askP(i);
    }
    a[0] = askL(0);
    a[n - 1] = t;
    for (i = 0; i < n - 1; ++i) a[n - 1] -= a[i];
  }
  printf("! ");
  for (i = 0; i < n; ++i) printf("%d", a[i]);
  printf("\n");
  fflush(stdout);
  return 0;
}
