#include <bits/stdc++.h>
inline char read() {
  static const int IN_LEN = 1024 * 1024;
  static char buf[IN_LEN], *s, *t;
  if (s == t) {
    t = (s = buf) + fread(buf, 1, IN_LEN, stdin);
    if (s == t) return -1;
  }
  return *s++;
}
template <class T>
inline void R(T &x) {
  static char c;
  static bool iosig;
  for (c = read(), iosig = false; !isdigit(c); c = read()) {
    if (c == -1) return;
    if (c == '-') iosig = true;
  }
  for (x = 0; isdigit(c); c = read()) x = ((x << 2) + x << 1) + (c ^ '0');
  if (iosig) x = -x;
}
const int OUT_LEN = 1024 * 1024;
char obuf[OUT_LEN], *oh = obuf;
inline void write_char(char c) {
  if (oh == obuf + OUT_LEN) fwrite(obuf, 1, OUT_LEN, stdout), oh = obuf;
  *oh++ = c;
}
template <class T>
inline void W(T x) {
  static int buf[30], cnt;
  if (x == 0)
    write_char('0');
  else {
    if (x < 0) write_char('-'), x = -x;
    for (cnt = 0; x; x /= 10) buf[++cnt] = x % 10 + 48;
    while (cnt) write_char(buf[cnt--]);
  }
}
inline void flush() { fwrite(obuf, 1, oh - obuf, stdout); }
const int MAXN = 1000 + 10;
int n, cur;
int num[MAXN];
inline int query(int l, int r) {
  static int temp[MAXN];
  for (int i = 1; i <= n; ++i) temp[i] = 0;
  for (int i = l; i <= r; ++i) temp[i] = 1;
  std::cout << "? ";
  for (int i = 1; i <= n; ++i) std::cout << temp[i];
  std::cout << std::endl;
  int x;
  std::cin >> x;
  return x;
}
int p1, p0, get[2];
int main() {
  std::cin >> n;
  int ans0 = query(2, 1);
  if (ans0 < query(1, 1))
    p0 = 1, get[0] = 1, cur = 1;
  else
    p1 = 1, get[1] = 1, cur = 0;
  int l = 2, r = n;
  while (l != r) {
    int mid = l + r >> 1;
    int x = query(l, mid), len = mid - l + 1;
    if (cur == 1) {
      if (x == ans0 + len)
        l = mid + 1;
      else
        r = mid;
    } else {
      if (x == ans0 - len)
        l = mid + 1;
      else
        r = mid;
    }
  }
  get[cur] = l;
  std::cout << "! " << get[0] << " " << get[1] << std::endl;
  return 0;
}
