#include <bits/stdc++.h>
using namespace std;
const long long mod = 998244353;
const long long INF = (1e+18) + 7;
const long double eps = 1e-6;
const long double pi = acos(-1.0);
using mat = pair<pair<long long, long long>, pair<long long, long long> >;
void debug(vector<int> &v) {
  int n = v.size();
  for (int i = 0; i < n; i++) {
    if (i > 0) cout << " ";
    cout << v[i];
  }
  cout << endl;
}
void debug(mat &m) {
  cout << m.first.first << " " << m.first.second << endl;
  cout << m.second.first << " " << m.second.second << endl;
}
long long mod_pow(long long a, long long n) {
  long long res = 1;
  while (n) {
    if (n & 1) res = res * a % mod;
    a = a * a % mod;
    n >>= 1;
  }
  return res;
}
void rev(vector<int> &v, int l, int r) {
  for (int i = l; i <= r; i++)
    if (v[i] >= 0) v[i] ^= 1;
}
int query(int l, int r) {
  cout << "? " << l + 1 << " " << r + 1 << endl;
  int res;
  cin >> res;
  return res;
}
void solve() {
  int n, t;
  cin >> n >> t;
  vector<int> v(n, -1);
  vector<pair<int, int> > cn;
  int ori = t;
  for (int i = 0; i < n / 2; i++) {
    while (true) {
      int c = i;
      int x = 0, y = 0;
      for (int j = 0; j < c; j++)
        if (v[j] == 1) x++;
      for (int j = 0; j < c; j++)
        if (v[n - 1 - j] == 1) y++;
      int cl = n - c - t + 2 * y - 1;
      int cr = n - c - t + 2 * y + 1;
      int cm = n - c - t + 2 * x;
      int l = i;
      int r = n - 2 - i;
      t = query(l, r);
      if (t == cm) {
        cn.push_back({l, n - 1});
        rev(v, l, n - 1);
      } else {
        cn.push_back({0, r});
        rev(v, 0, r);
        v[n - 1 - i] = (t == cr);
        break;
      }
    }
    while (true) {
      int c = i;
      int x = 0, y = 0;
      for (int j = 0; j < c; j++)
        if (v[j] == 1) x++;
      for (int j = 0; j < c; j++)
        if (v[n - 1 - j] == 1) y++;
      int cl = n - c - t + 2 * x - 1;
      int cr = n - c - t + 2 * x + 1;
      int cm = n - c - t + 2 * y;
      int l = i + 1;
      int r = n - 1 - i;
      t = query(l, r);
      if (t == cm) {
        cn.push_back({0, r});
        rev(v, 0, r);
      } else {
        cn.push_back({l, n - 1});
        rev(v, l, n - 1);
        v[i] = (t == cr);
        break;
      }
    }
  }
  for (int i = (int)cn.size() - 1; i >= 0; i--) {
    int l = cn[i].first, r = cn[i].second;
    rev(v, l, r);
  }
  int cnt = 0;
  for (int i = 0; i < n; i++)
    if (v[i] == 1) cnt++;
  if (n % 2) v[n / 2] = (cnt != ori);
  string ans;
  for (int i = 0; i < n; i++) ans.push_back('0' + (v[i]));
  cout << "! " << ans << endl;
}
signed main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  solve();
  char nyaa;
  cin >> nyaa;
  return 0;
}
