#include <bits/stdc++.h>
using namespace std;
const long long maxn = 1e5 + 5;
const int lg = 17;
int high, low, mid, now, t, x, y, n, flag0, flag1, x0[1000][1000],
    x1[1000][1000], a[2];
string s, k;
void f(int x, int y) {
  string s;
  for (int i = 0; i < x; i++) s.push_back('0');
  for (int i = x; i <= min(n - 1, y); i++) s.push_back('1');
  for (int i = y + 1; i < n; i++) s.push_back('0');
  cout << "? " << s << endl;
}
int main() {
  fill(a, a + 2, -1);
  cin >> n;
  low = 0, high = n - 1;
  f(n, n);
  cin >> t;
  x1[0][n - 1] = t, x0[0][n - 1] = n - t;
  while (high - low > 1) {
    mid = (high + low) / 2;
    f(mid, high);
    cin >> x;
    int len = high - mid + 1;
    int t1 = (t - x + len) / 2;
    int t0 = len - t1;
    x1[mid][high] = t1, x0[mid][high] = t0;
    x1[low][mid - 1] = x1[low][high] - x1[mid][high],
                  x0[low][mid - 1] = x0[low][high] - x0[mid][high];
    if (x1[mid][high] and x0[mid][high]) {
      low = mid;
      continue;
    }
    if (x1[low][mid - 1] and x0[low][mid - 1]) {
      high = mid - 1;
      continue;
    }
    if (x1[low][mid - 1])
      return cout << "! " << high + 1 << " " << low + 1 << endl, 0;
    else
      return cout << "! " << low + 1 << " " << high + 1 << endl, 0;
  }
  f(high, high);
  cin >> x;
  if (x > t)
    a[0] = high, a[1] = low;
  else
    a[0] = low, a[1] = high;
  cout << "! " << a[0] + 1 << " " << a[1] + 1 << endl;
  return 0;
}
